程序我不写了,因为我是看书抄的(我是小鸟麻)。
给个提示:(1---n*n的方阵)
1,将1排到第一行中间一列。
2,从2到最后一个数字,每个数存放的行,列为前一个的行数减一,列数加一。
3,当上个一数的行数为一时,下一个数的行数为n.
4,当上一个数的列数为n时,下一个数的列数为1.
5,若下一个数的位置上有数字了,则下一个数存放到上一个数的列数加一的位置。
OK了,不行的话再留言。
main()
{int i,j,p=1,a[16][16],k,n;
while(p==1)
{printf(input a number(0~15):");
scanf("%d",&n);
if((n<=15&&n>0)&&(n%2)!=0) p=0; /*输入一个小于15的奇数*/
else {p=1;printf("dataerror!\n");}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[i][j]=0; /*建立一个n*n的方阵*/
i=0;j=n/2;
a[i][j]=1;
for(k=2;k<=n*n;k++)
{i=i-1;j=j+1;
if(i<0&&j>n-1) {i=i+2;j=j-1;}
else{ if(i<0) i=n-1;
if(j>n-1) j=0;
}
if(a[i][j]==0) a[i][j]=k;
else {i=i+2;j=i-1;a[i][j]=k;}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
应该是这样的!
[此贴子已经被作者于2004-05-30 19:11:49编辑过]