魔方阵,问题。
#define N 7#include <stdio.h>
int main()
{
int a[N][N]={0},i=0,j,k; /*先令所有元素都为0*/
j=(N-1)/2;
i=0;
for(k=1;k<=N*N;) /*开始处理*/
{
if((i<0)&&(j==N)) /*前一个数是第一行第N列时,把下一个数放在上一个数的下面*/
{
i=i+2;
j=j-1;
}
else if(i<0) /*当行数减到第一行,返回到最后一行*/
i=N-1;
else if(j>N-1) /*当列数加到最后一行,返回到第一行*/
j=0;
else if(!a[i][j])
{ /*如果该元素为0,继续执行程序*/
a[i][j]=k++;
i=i-1;
j=j+1;
}
else /*如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面,放在上一个数的下边不应是i不变吗,为什么是i+2*/
{
i=i+2;
j=j-1;
}
}
for(i=0;i<N;i++) /* *<="" span="" style="word-wrap: break-word;">输出数组*/
{
for(j=0;j<N;j++)
printf("%-5d",a[i][j]);
printf("\n\n");
}
return 0;
}
魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。
如3×3的魔方阵:
8 1 6
3 5 7
4 9 2