巧排魔方阵 江苏 高健青 1994-07-01 如果用排列组合的方法寻找魔方阵,一则编程比较麻烦,更重要的是随着n的增大,计算量呈几何级数上升,结果要等上老半天才能出来。如果能掌握魔方阵的规律,那就简单多了。行数、列数为n的魔方阵有各种排法,没有共同的规律,但满足下述条件的方阵一定是魔方阵: 一、第一行的中间列位置的数是1。 二、若数K是n的整数倍,则数K+1在数K的下方,若数K在最后一行,则数K+1在第一行对应的位置上。 三、若数K不是n的整数倍,则数K+1在数K的右上方,即数K的行减-、列加一的位置上。若数K在第一行,则数K+1在最后一行相对应的位置上;若数K在最后一列,则数K+1在第一列相应的位置上。 根据以上条件很容易排出一个阶数为n的魔方阵,若将这个魔方阵对称的行或列互换,就可以得到一系列新的魔方阵。 下面是我编的排魔方阵,只要稍作修改,应可扩大允许的n的范围,理论上可扩至n≤46339。该程序在SUPER386上用TURBO C2.0编译,连接后运行通过。 main() { int n=0,m,i,j,k,a[32][32]; while(n%2==0) { printf("enter the umnber of n\n");  scanf("%ld",&n); } m=n*n; i=1; j=(n+1)/2;k=1;  while(k<=m) { if(i==0) i=n; if(j>n) j=1; if(k%n!=0) a[i--][j++]=k++; else a[i++][j]=k++; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); } } (江苏 高健青)