好像太复杂了,看看下面程序:
#include
void main()
{
int a[50][50]={{0}};
int n,k,i,j,i0,j0;
scanf("%d",&n);
i=0, j=n/2; // ⑴将1放在第一行中间一列;
for(k=1;k<=n*n;k++)
{
a[i][j]=k;
i0=i, j0=j; //记下刚刚填入数据的位置
i--, j++; // 每一个数存放的行比前一个数的行数减1,列数加1
if(i<0) i=n-1; //⑶如果上一个数的行数为1(0),则下一个数的行数为n(n-1)
if(j==n) j=0; //⑷当上一个数的列数为n(n-1)时,下一个数的列数应为1(0),
if(a[i][j]!=0) //⑸如果……则把下一个数放在上一个数的下面。
i=i0+1, j=j0;
}
for(i=0;i
putchar('\n');}
}