C语言 螺旋矩阵有个步骤不明

来源:百度知道 编辑:UC知道 时间:2024/06/21 00:23:49
#include <stdio.h>
//输出一个N阶螺旋方阵
void main()
{
int i,j,k,m=1,n,a[100][100];
j=0;k=0;
printf("请输入想要输出方阵的阶数(n<17):\n");
scanf("%d",&n); //输入想要输出的阶数N
while(k<=(n+2)/2)
{
j=k;
for(i=k;i<=n-k-1;i++)
{
a[i][j]=m;
m++;
}

i=n-k-1;
for(j=k+1;j<=n-k-1-1;j++)
{
a[i][j]=m;
m++;
}

j=n-k-1;
for(i=n-k-1;i>=k;i--)
{
a[i][j]=m;
m++;
}
i=k;
for(j=n-k-1-1;j>=k+1;j--)
{
a[i][j]=m;
m++;
}
k++;
}
if(n%2!=0)
a[(n-1)/2][(n-1)/2]=a[(n-1)/2][(n-1)/2]-1; //注意这步
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
请大家看下面几排我注释的IF那里,请问那个IF语句有什么用,代表什么意思,谢谢
我就是想问问为什么去掉中心后结果会差一个元素,请说清楚一点把

这是有那条if判断的结果:

请输入想要输出方阵的阶数(n<17):
5
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9

这是去掉if判断的结果, 看到变化了吗, 注意中心元素,阶数为奇数时,中心元素为a[(n-1)/2][(n-1)/2]:
1 16 15 14 13
2 17 24 23 12
3 18 26 22 11
4 19 20 21 10
5 6 7 8 9