#include
int main()
{
int array[16][16];
int i,j,k,m,n;
//变量初始化
m=1;
while(m==1)
{
printf("请输入n(0
//判断n是否为大于0小于16的奇数
if((n>0)&&(n<16)&&(n%2!=0))
{
printf("矩阵阶数是%d\n",n);
m=0;
}
}
//数组赋初值为0
for(i=0;i<16;i++)
for(j=0;j<16;j++)
array[i][j]=0;
//建立魔方阵
j=n/2+1;
array[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1; //行数减少1
j=j+1; //列数增加1
if((i<1)&&(j>n))
{
i=i+2; //行数增加2
j=j-1; //列数减少1
}
else
{
if(i<1) //如果行数小于1,则跳转到第n行
i=n;
if(j>n) //如果列数大于n,则回到第1列
j=1;
}
if(array[i][j]==0)
array[i][j]=k;
else
{
i=i+2;
j=j-1;
array[i][j]=k;
}
}
//输出魔方阵
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%5d",array[i][j]);
printf("\n");
}
return 0;
}