/*参考资料: 魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一
/*参考资料: 魔方阵的排列规律如下:
⑴将1放在第一行中间一列;
⑵从2开始直到n×n止各数依次按下列规则存放;每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列);
⑶如果上一个数的行数为1,则下一个数的行数为n(指最下一行);例如1在第一行,则2应放在最下一行,列数同样加1;
⑷当上一个数的列数为n时,下一个数的列数应为1,行数减去1。例如2在第3行最后一列,则3应放在第二行第一列;
⑸如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如按上面的规定,4应该放在第1行第2列,但该位置已经被占据,所以4就放在3的下面;
*/
#include
int main()
{
int a[49][49]={0};
int i,j,n,hang,lie;
printf("请输入魔方阵的阶数:(1~49)并且为奇数
");
scanf("%d",&n);
if (n49||n%2==0)//判断阶数是否在1~49之间,并且为奇数
{
printf("请正确输入阶数!
");
return 0;
}
a[0][n/2]=1;//第一行中间一个为1
hang=0;
lie=n/2;
for (i=2;i<=n*n;i )
{
hang=hang-1;//步骤(2)
lie=lie 1;
if (hang==-1)//当行数为0时到最后边
{
hang=n-1;
}
if (lie==n)//列数到最右边时变为0
{
lie=0;
}
while (a[hang][lie]!=0)//当重复时行数加一
{
hang=hang 1;//防止溢出
if(hang==n)
{
hang=0;
}
}
a[hang][lie]=i;
}
for (i=0;i
{
for(j=0;j
{
printf("%d ",a[i][j]);
}
printf("
");
}
return 0;
}
我写的代码,结果打印出来的矩阵不满足魔方阵的条件。
哪位好心人告诉我错在哪里啦。感激不尽……
展开
全部