幻方的生成

来源:互联网 发布:华为云计算面试 编辑:程序博客网 时间:2024/05/17 02:38

1、幻方(Magic Square)简介

    1. 幻方是最古老和最流行的数学游戏之一。一个 n 阶幻方有整数 1,2 , 3,···,n² 按下述方式组成的 n × n 方阵。该方阵每行上的整数的和、每列上的整数的和以及两条对角线中的每条对角线上的整数的和都等于同一个数 s。这个数 s 就叫做该幻方的幻和。下面是3阶和4阶的两个例子 :

[ 8   1   6 ]                                 [ 16   3   2   13 ]

[ 3   5   7 ]                和              [ 5   10  11   8 ]

[ 4   9   2 ]                                  [ 9    6   7   12 ]

                                                  [4   15   14   1 ]

这两个幻方的幻和分别是15 和 34。在中世纪时期曾存在与幻方相关的玄想;人们将幻方佩戴身上用来辟邪。本杰明·富兰克林就是一个幻方迷,他的论文中包含很多有缺的例子。

一个 n 阶幻方的所有整数的和为

1 + 2 + 3 + ··· + n = n²(n²+1)/2

这里用到了算术级数的求和公式。由于一个 n 阶幻方共有 n 行,每行都有一个幻和 s。因此我们得到关系 ns = n²(n²+1)/2。于是,任意两个 n 阶幻方都有相同的幻和, 即

s = n (n²+1)/2

其组合问题就是,确定那些能够组成 n 阶幻方的 n 的值,同时找出一般的构造方法。不难验证,不可能存在2阶幻方(其幻和应该是5)。


2、幻方的构造

    2.1  构造奇数阶幻方

  • 2.1.1 算法

 所有其他的 n > 2,n 阶幻方能够构造出来。存在着许多构造幻方的特殊方法。这里,我们介绍delaloubere在17世纪发现的一种构造 n 阶幻方的方法,其中 n 是奇数。

首先将1放在最上一行的中间。其后沿着自左下至右上的这条对角线按自然顺序放置,但同时须作如下修正:

      1. 在到达顶行时,下一个整数要放在底行,所放位置就是把底行当做顶行上边一行时该数应该放置的位置。
      2. 当到达最右边的一列时,下一个整数要放在最左边的一列上,所放位置就是把最左边的一列当作最右边那列的右边的列时该数应该放置的位置。
      3. 当要放的位置上已经填好了整数,或上一个整数已经放在了幻方的右上角时,则当前要摆放的整数将放在紧挨上述位置的下方。

        还有奇数阶口诀哦!!!生气

1 坐边中间,斜着把数填。出边填对面,偶数往下旋。出角仅一次,转回下格间。


  • 2.1.2 C++程序实现

2.1.3 运行结果

5阶和15阶结果如下图:


0 0
原创粉丝点击