| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖, 1 人收藏
标题:当年的幻方设计--游戏之作
只看楼主 加入收藏
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
结帖率:66.67%
收藏(1)
已结贴  问题点数:20 回复次数:2 
当年的幻方设计--游戏之作
看到还有人在研究幻方问题,就把十多年前的习作给大家看看----献丑了。
对任意的奇数阶幻方,设阶数为n,将1至n*n的自然数填入幻方中,使每一行、每一列、主、辅对角线元素之和相等。
一.    先说幻方生成部分的伪代码(其余验证及输出就很简单了):
1.    将k=1填入最上一行的中间位置;
2.    k从2到n*n,依次做:
2.1. 若k为n的整数倍加1,则将k填入前一个数的正下方,否则填入前一个数右上方;
2.2. 若2.1.操作的位置不在幻方范围内,则将操作位置改在同一行(或同一列)的另一端。

二.    核心代码
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int n;    /*阶数*/
  int k=1;  /*自然数:1…n*n*/
  int row,  col;  /*幻方的行号与列号*/
  int m[25][25];   /*幻方阵列*/
  scanf( "%d",  &n);
  if(n % 2 == 0)
      n++;      /*保证n是奇数*/
  if( n>=25)
    n=25;     /*太大的幻方输出有些困难,控制在25阶之内*/
  printf("\n n=%d",n);
  m[row=0][col=n/2] = k;  /*最上一行中间一列填入1*/
  for( k=2; k<=n*n; k++)
  {
      if( k%n == 1)         /*k是n的整数倍加1*/
      {
          row=(row+1)%n;   /*填入位置是正下方,若出范围填入最上一行*/
      }
      else
      {
          row=(row-1+n)%n;   /*填入位置是右上方,若出行范围填入最下一行*/
          col=(col+1)%n;      /*填入位置是右上方,若出列范围填入最左一列*/
      }
      
      m[row][col]=k;
  }
  
  for(row=0; row<n; row++)
  {
      printf("\n");
      for(col=0; col<n; col++)
          printf("%4d",m[row][col]);
  }
  printf("\n");
  system("PAUSE");   
  return 0;
}

三.    游戏之作(循环体中只有一句,若无二部分铺垫,估计能看懂的人不多)
m[row=0][col=n/2]=k=1;
for(k=0; k<n*n; k++)
    m[row=(k%n==1)? (row+1)%n: (row-1+n)%n][col=(k%n==1)? col:(col+1)%n]=k;

搜索更多相关主题的帖子: 游戏 设计 
2009-11-24 17:08
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:0 
n=3

8   1   6
3   5   7
4   9   2

除了每一行、每一列、主对角线、辅对角线的和均为15之外,还有第一行和第三行的平方之和相等,第一列和第三列的平方之和相等。幻方的对称之美!!
能将上述的结论验算过程写进程序吧?请各位试试吧!
2009-11-24 17:25
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:14 
好东西··没试过··好像小学的时候奥赛有玩过··那时做的吐血···留个印记···以后试试···
2009-11-25 11:04
快速回复:当年的幻方设计--游戏之作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050257 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved