#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
int i=0,j,k,n;
int a[10][10]={0};
printf("输入:");
scanf("%d",&n);
//判断1的位置
j=(n-1)/2;
a[0][j]=1;
for(k=1;k<n*n;k++)//
{
if((i==0)&&(j==n-1))//用来判断方阵中右上角的特殊数字
i=i+1;
else if(i==0)//如果是第一行i就跳到第五行
{
i=n-1;
j=j+1;
}
else if(j==n-1)//如果是第n-1列j就回到第一列
{
i=i-1;
j=0;
}
else
{
i=i-1;//魔方阵正常数规则行数-1,列数+1
j=j+1;
}
if(a[i][j]==0)//如果方针中的元素为0替换
{
a[i][j]=k;
}
else//如果上面有了其他数放其下面(因为之前执行过i-1,j+1)
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}//for循环在此结束
for(i=0;i<n;i++)//输出
{
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);}
printf("\n");
}
return 0;
}
输入3:
8 1 6
3 5 7
4 9 2