魔方阵是这样的方阵:它的每一行,每一列和对角线之和均相等。
输入n,要求打印由自然数构成的魔方阵(n为奇数)
魔方阵中各数排列规律如下:
(1)将“1”放在第一行的中间一列;
(2)从“2”开始直到n*n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减一,列数同样加1.
(3)如果上一个数的列数为1,则下一个数的行数为n(最后一行)
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1
(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。
C语言实现:
#include "stdio.h"
#define N 10
void main()
{
int n,i,j,a,b,num,u,v;
int c[10][10];
printf("请输入奇数:");
scanf("%d",&n);
while(n%2==0)
{
printf("请输入奇数:");
scanf("%d",&n);
}
num=n*n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
c[i][j]=0;
c[0][n/2]=1;
a=0;
b=n/2;
for(i=2;i<=num;i++)
{
if(a)
u=a-1;
else
u=n-1;
v=(b+1)%n;
if(!c[u][v])
c[u][v]=i;
else
{
u=(a+1)%n;
v=b;
c[u][v]=i;
}
a=u;
b=v;
}
for(i=0;i<n;i++)
{ for(j=0;j<n;j++)
printf("%4d",c[i][j]);
printf("\n");
}
}