#include
int main()
{
int a[10][10],i,j,n,k;
scanf("%d",&n);//输入n阶
for(i=1;i<=n;i++)//初始化数组,防止一个单元格内重复填数 //int a[10][10]={0};//方便起见,i从1开始
{
for(j=1;j<=n;j++)
{
a[i][j]=0;
}
}
a[1][n/2+1]=1; //n/2+1
for(k=2;k<=n*n;k++)//布置数组 ,i,j代表上一个数
{
i=i-1;//每个数上一个数的行数减一
j=j+1;// 列数加一 //从这里开始i,j就代表现在这个数 ,而不是上一个
if(i==0)
{
i=n;
}
if(j>n)
{
j=1;
}
if(i==0&&j==n+1)//第一行第n列,把下一个数放在这个数的下面
{
i=i+2;
j=j-1;
}
if(a[i][j]==0)
{
a[i][j]=k;
}
else
{
i=i+2;//一样的问题,i,j表示上一个数,应先将其还原,在按规律执行
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
return 0;
}
注释是我一开始写错的地方,不清楚逻辑哪里还有问题
i=i+2;//一样的问题,i,j表示上一个数,应先将其还原,在按规律执行
j=j-1;
a[i][j]=k;
你怎么保证i的值不大于10呢?比如本次循环i值为8