幻方的生成
来源:互联网 发布:华为云计算面试 编辑:程序博客网 时间:2024/05/17 02:38
1、幻方(Magic Square)简介
幻方是最古老和最流行的数学游戏之一。一个 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.1.2 C++程序实现
2.1.3 运行结果
5阶和15阶结果如下图:
- 幻方的生成
- 幻方的生成
- 100以内奇数幻方的生成
- 生成幻方的小程序
- 我的幻方
- 幻方的计算
- 神奇的幻方
- 神奇的幻方
- 神奇的幻方
- 神奇的幻方
- 主键生成方assigned
- Android生成和引用第三方库(jar)的…
- Android生成和引用第三方库(jar)的…
- AutoHotkey用楼梯法生成奇数幻方
- 幻方解法之Merzirac法生成奇阶幻方
- 幻方解法之Louberel法生成奇阶幻方
- 幻方解法之horse法生成奇阶幻方
- 幻方解法之错位补角法生成奇阶幻方
- RETURNING into用法
- Android开发中UI设计高仿各个应用
- Linux网络流量监控Iftop安装
- OpWeb——MySQL同步模块(1)
- 如何创建 CAB 文件和如何从文件、内存和资源中解压缩 CAB 文件
- 幻方的生成
- Search for a Range
- 希腊人6
- uva 11012 - Cosmic Cabbages(暴力)
- 比例阀为什么需要比例阀放大器
- Delphi中如何给一个字符串从左边进行补0
- 【Ogre编程入门与进阶】第四章 Ogre的设计理念与特色
- 浙江大学研究生复试上机真题——1975:ZOJ
- java发邮件的实现