很短,但应该不是最短,仅用循环来完成
#include <stdio.h> //头文件
版本一(数字1在中间偏右):
int main()
{
long nList[19][19],n=0,n1,n2,nh;
while(n%2==0)scanf("%d",&n);//输入阶数
for(n2=n*n,n1=0,nh=n/2;n1<n2;n1++)//计算生成
nList[(n1*(n-1)+nh+n1/n)%n][(n1+nh+1+n1/n)%n]=n1+1;
for(n2=0;n2<n;n2++)//结果输出
{
for(n1=0;n1<n;n1++)printf("%4d",nList[n2][n1]);
printf("\n");
}
return 0;
}
版本二(数字1在第一行中间):
int main()
{
long nList[31][31],n=0,n1,n2;
while(!(n&1))scanf("%d",&n);//输入阶数
for(n2=n*n,n1=0;n1<n2;n1++)//计算生成
nList[(n1*(n-1)+(n1/n)*2)%n][(n1+(n>>1)-n1/n)%n]=n1+1;
for(n2=0;n2<n;n2++)//结果输出
{
for(n1=0;n1<n;n1++)printf("%4d",nList[n2][n1]);
printf("\n");
}
return 0;
}
评论