//奇数阶魔方阵的排列
#include<stdio.h>
#include<stdlib.h>
void main()
{
int **a;
int i,j,n,k=1,_i,_j;
do{
printf("输入一个奇数: ");
scanf("%d",&n);
fflush(stdin);
}while(n%2==0||n<3);
a=(int **)malloc(n*sizeof(int *));//建动态数组
if(!a) exit(-1);
for(i=0;i<n;i++)
{
a[i]=(int *)malloc(n*sizeof(int ));
if(!a[i]) exit(-1);
}
for(i=0;i<n;i++) //动态数组初始为0
for(j=0;j<n;j++)
a[i][j]=0;
i=0; //组建魔方阵
j=n/2;
a[i][j]=k++;
for(;;)
{
_i=(i-1+n)%n;
_j=(j+1)%n;
if(a[_i][_j]==0) a[i=_i][j=_j]=k++;
else
{
_i=(i+1)%n;
_j=j;
if(a[_i][_j]==0) a[i=_i][j=_j]=k++;
else break;
}
}
for(i=0;i<n;i++) //输出魔方阵
{
printf("\n");
for(j=0;j<n;j++)
printf("%8d",a[i][j]);
}
getchar();
}
|