魔方阵,它的每一行,每一列以及对角线上的各数之和为一个相同的常数。
这里只考虑了奇次阶魔方阵,数组下标是从1~n。
#include<stdio.h>
int main()
{
int i, j, i1, j1, x, n, a[100][100];
printf("input an odd number:");
scanf("%d", &n);
if (n % 2 == 0)
{
printf("input error!\n");
return 0;
}
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
a[i][j] = 0;
i = 1;
j = (int)(n+1)/ 2;
x = 1;
while (x <= n * n)
{
a[i][j] = x;
x = x + 1;
i1 = i;
j1 = j;
i = i -1;
j = j - 1;
if (i == 0) i = n;
if (j == 0) j = n;
if (a[i][j] != 0)
{
i = i1 + 1;
j = j1;
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
}