很短,但应该不是最短,仅用循环来完成#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;}

评论