微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题巧排魔方阵
栏目基础知识与讲座
作者江苏 高健青
发布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");
  }
  }
  
  (江苏  高健青)