输出魔方阵。所谓魔方阵是指这样的方阵,它的每一列,每一行,和对角线之和均相等。例如三阶魔方阵如下;
8 1 6
3 5 7
4 9 2
输出要求由1到n的魔方阵
解题思路:
魔方阵的阶数应该为奇数。
1.将1放置在第一列的中间。
2.从2开始到n的平方依次按照如下的规则存放:每一个数存放的行数逗比上一个数的行数减一,列数加一。
3.如果上一个数的行数为1,下一个数的行数为n.
4.如果上一个数的列数为n,下一个数的列数为1.
5.如果按照上面的规则来放好数,或上一个数是第一行第n列,则把下一个数放在上一个数的下面。
#include<stdio.h>
int main()
{
int a[16][16];
int i,j,k,p,n;
printf("请输入魔方阵的阶数:(1-15)");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1) i=n;
if(j>n) j=1;
}
if(a[i][j]==0)
{
a[i][j]=k;
}
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d ",a[i][j]);
printf("\n");
}
return 0;
}