幻方的实现,矩阵每行每列每个对角线之和相等

/************************************************************************************
作者: 徐权
完成日期:20150721
函数功能:幻方功能的实现(每行每列每个对角线的和是相等的)
*************************************************************************************/




#include<stdio.h>
#include<stdlib.h>
#include<math.h>




#define N 10  //下面有手动输入函数,如果使用,请将这条代码注释,下面scanf()函数代码激活,默认N为10


int main()
{
int **huanfang;
int i, j;
int count = 1;


//手动输入调用函数
//int N;
//puts("请输入幻方矩阵的边宽:");
//scanf_s("%d", &N);  //VS2013及以上平台手动输入函数调用
//scanf("%d", &N);  //VC++6.0 等C89的标准库调用函数,linux c99调用也可以


huanfang = (int **)malloc(sizeof(int *)*N);
for (i = 0; i < N; i++)
{
huanfang[i] = (int *)malloc(sizeof(int)*N);
}
if (huanfang == NULL)
{
puts("内存开辟失败!!");
}
for ( i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
huanfang[i][j] = 0;
printf("%5d ",huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}
printf("askjdfjashfasgsdg\n");
i = 0;
j = (int)(N + 1) / 2;
while (1)
{
if (huanfang[i][j] == 0)
{
huanfang[i][j] = count;
i = (i + 1) % N;
j =(abs (j + N - 1)) % N;
count++;
}
else
{
i = (abs(i + N - 1)) % N;
j = (j + 2) % N;
huanfang[i][j] = count;
i = (i + 1) % N;
j = (abs(j + N - 1)) % N;
count++;
}
if (count == (N*N+1))
{
break;
}
}




for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
printf("%5d ", huanfang[i][j]);//设置的数字宽度为5
}
printf("\n");
}


system("pause");
return 0;

}


没有优化,欢迎批评和讨论

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章