任意奇数幻方的米字平衡法

合集下载

2021年幻方解法整理归纳

2021年幻方解法整理归纳

在一种由若干个排列整洁数构成正方形中,图中任意一横行、一纵行及对角线几种数之和都相等,具备这种性质图表,称为“幻方”。

国内古代称为“河图”、“洛书”,又叫“纵横图”。

1、奇数阶幻方——罗伯特法(也有人称之为楼梯法)(如图一:以五阶幻方为例)奇数阶幻方n为奇数(n=3,5,7,9,11……) (n=2×k+1,k=1,2,3,4,5……)奇数阶幻方最典型填法是罗伯特法(也有人称之为楼梯法)。

填写办法是这样:把1(或最小数)放在第一行正中;按如下规律排列剩余n×n-1个数:(1)每一种数放在前一种数右上一格;(2)如果这个数所要放格已经超过了顶行那么就把它放在底行,依然要放在右一列;(3)如果这个数所要放格已经超过了最右列那么就把它放在最左列,依然要放在上一行;(4)如果这个数所要放格已经超过了顶行且超过了最右列,那么就把它放在前一种数下一行同一列格内;(5)如果这个数所要放格已有数填入,解决办法同(4)。

这种写法总是先向“右上”方向,象是在爬楼梯。

口诀:1居首行正中央,依次右上莫相忘上出格时往下放,右出格时往左放.排重便往自下放,右上出格一种样图一 2、单偶数阶幻方()122+=m n ——分区调换法(如图二:以六阶幻方为例)① 把()122+=m n 阶幻方均提成4个同样小幻方A 、B 、C 、D(如图二)图二(注意A 、B 、C 、D 相对位置不能变化,由于12+m 为奇数,因此A 、B 、C 、D 均为奇数阶幻方) ② 用持续摆数法在A 中填入21a ——构成幻方,同理,在B 中填入()2221a a ——+、在C 中填入()22312a a ——+、在D 中填入()22413a a ——+均构成幻方(2na =)(如图三)图三(由于12+m 为奇数,因此A 、B 、C 、D 均为奇数阶幻方,必然可以用持续摆数法构造幻方)③ 在A 中间一行上从左侧第二列起取m 个方格,在其他行上则从左侧第一列起取m 个方格,把这些方格中数与D 中相应方格中数字对调(如图四):图四 不论是几阶幻方,在A 中取数时都要从中间一行左侧第二列开始;由于当6=n 时,1=m ,因此本例中只取了一种数)④ 在A 中从最右一列起在各行中取1-m 个方格,把这些方格中数与D 中相应方格中数字对调。

幻方_??????

幻方_??????

幻方1.概念简析:幻方:是指横行、竖列、对角线上数的和都相等的数的方阵,具有这一性质的3×3的数阵称作三阶幻方,4×4的数阵称作四阶幻方,5×5的称作五阶幻方……如图为三阶幻方、四阶幻方的标准式样.2.构造幻方常用的方法:(1)适用于所有奇数阶幻方的填法—罗伯法.口诀是:一居上行正中央,后数依次右上连.上出框时往下填,右出框时往左填.排重便在下格填,右上排重一个样.(2)仅适用于三阶幻方—九宫格口诀.口诀是:九宫者,二四为肩,六八为足,左七右三,戴九履一,五居中央。

(3)适用于所有偶数阶幻方的填法—对称交换的方法1.将数依次填入方格中,对角线满足要求。

2.调整行,对角线数不动,对称行的其它数对调;调整列,对角线数不动,对称列的其它数对调。

3.三阶幻方的性质:1.幻和相等,幻和等于9个数的和除以3.2.中间数必位于幻方中心,中间数等于幻和除以3.3.黄金三角: 黄金三角顶点的数为两腰之和除以2.视频描述把0、2、4、6、8、10、12、14、16这9个数填在下面图中的方格内,使每行、每列和每条对角线上的三个数的和都相等。

1.1.请用11、13、15、17、19、21、23、25、27编制一个三阶幻方。

注:此题答案默认为0,正确答案见解析!2.2.把7—15这九个数构成一个三阶幻方。

注:此题答案默认为0,正确答案见解析!3.3.请用1、4、7、10、13、16、19、22、25编制一个三阶幻方。

注:此题答案默认为0,正确答案见解析!视频描述将下面左边方格中的9个数填入右边方格中,使每一行、每一列、每条对角线中的三个数相加的和都相等。

1.1.将图中的数重新排列,使横行、竖行、对角线上的三个数的和都相等。

注:此题答案默认为0,正确答案见解析!2.2.把3、4、5、8、9、10、13、14、15编成一个三阶幻方,并求出幻和是多少?3.3.将图中的数重新排列,使横行、竖行、对角线上的三个数的和都相等。

幻方常规解法汇总

幻方常规解法汇总

幻方常规解法汇总按目前填写幻方的方法,是把幻方分成了三类,即奇数阶幻方、双偶阶幻方、单偶阶幻方。

下面按这三类幻方,列出最常用解法(考试用,不求强大,只求有效!)。

奇数阶幻方(罗伯法)奇数阶幻方最经典的填法是罗伯法。

填写的方法是:把1(或最小的数)放在第一行正中;按以下规律排列剩下的(n×n -1)个数:1、每一个数放在前一个数的右上一格;2、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;3、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;4、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;5、如果这个数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。

例,用该填法获得的5阶幻方:17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9双偶数阶幻方(对称交换法)所谓双偶阶幻方就是当n可以被4整除时的偶阶幻方,即4K阶幻方。

在说解法之前我们先说明一个“互补数”定义:就是在n阶幻方中,如果两个数的和等于幻方中最大的数与1的和(即n×n+1),我们称它们为一对互补数。

如在三阶幻方中,每一对和为10的数,是一对互补数;在四阶幻方中,每一对和为17的数,是一对互补数。

双偶数阶幻方的对称交换解法:先看看4阶幻方的填法:将数字从左到右、从上到下按顺序填写:1 2 3 45 6789 1011121314 15 16内外四个角对角上互补的数相易,(方阵分为两个正方形,外大内小,然后把大正方形的四个对角上的数字对换,小正方形四个对角上的数字对换)即(1,16)(4,13)互换(6,11)(7,10)互换即可。

16 2 3 135 11 10 89 7 6 124 14 15 1对于n=4k阶幻方,我们先把数字按顺序填写。

幻方算法(转)

幻方算法(转)

幻⽅算法(转)幻⽅的算法(C++版)⼀、幻⽅按照阶数可分成了三类,即奇数阶幻⽅、双偶阶幻⽅、单偶阶幻⽅。

⼆、奇数阶幻⽅(劳伯法)奇数阶幻⽅最经典的填法是罗伯法。

填写的⽅法是:把1(或最⼩的数)放在第⼀⾏正中;按以下规律排列剩下的(n×n-1)个数:(1)每⼀个数放在前⼀个数的右上⼀格;(2)如果这个数所要放的格已经超出了顶⾏那么就把它放在底⾏,仍然要放在右⼀列;(3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上⼀⾏;(4)如果这个数所要放的格已经超出了顶⾏且超出了最右列,那么就把它放在底⾏且最左列;(5)如果这个数所要放的格已经有数填⼊,那么就把它放在前⼀个数的下⼀⾏同⼀列的格内。

例,⽤该填法获得的5阶幻⽅:17241815235714164613202210121921311182529⼆、双偶数阶幻⽅(海尔法)所谓双偶阶幻⽅就是当n可以被4整除时的偶阶幻⽅,即4K阶幻⽅。

在说解法之前我们先说明⼀个“互补数”定义:就是在n阶幻⽅中,如果两个数的和等于幻⽅中最⼤的数与1的和(即n×n+1),我们称它们为⼀对互补数。

如在三阶幻⽅中,每⼀对和为10的数,是⼀对互补数;在四阶幻⽅中,每⼀对和为17的数,是⼀对互补数。

双偶数阶幻⽅最经典的填法是海尔法。

填写的⽅法是:以8阶幻⽅为例:(1)先把数字按顺序填。

然后,按4×4把它分割成4块(如图)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364(2)每个⼩⽅阵对⾓线上的数字(如左上⾓⼩⽅阵部分),换成和它互补的数。

64236160675795554121351501617474620214342244026273736303133323435292838392541232244451918484915145253111056858595462631三、单偶数阶幻⽅(斯特拉兹法)所谓单偶阶幻⽅就是当n不可以被4整除时的偶阶幻⽅,即4K+2阶幻⽅。

幻方法则

幻方法则

幻方幻方法则南宋杨辉不仅精通数学,而且精通易学,在他1275年所著的《续古摘奇算法》中,就对河图和洛书的数学问题进行了详尽的研究。

其中对3阶幻方的排列,找出了一种奇妙的规律:“九子斜排,上下对易,左右相更,四维挺出,戴九履一,左三右七,二四为肩,六八为足”,清代,李光地的《周易折中》把杨辉所概括的这种排列排列原理为“阳动阴静”。

我们通常所说的幻方是平面和幻方。

n阶幻方就是在n×n的方格中填上n^2【n的平方】个数,行、列和对角线的和值相等为完美幻方,行、列和值相等为不完美幻方。

这一和值叫幻和值。

一个n阶幻方幻和值公式为:Nn=1/2xn(n2+1)【注:n2是n的平方】幻方分为奇阶幻方和偶阶幻方,构成方法也不同。

【奇阶幻方】一、Merzirac法生成奇阶幻方在第一行居中的方格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向下移一格继续填写。

如下图用Merziral法生成的5阶幻方:17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9Merzirac法,有人也叫楼梯法,我管它叫斜步法,即走X+Y斜步(数字按右上方顺序填入),-Y跳步(如果右上方已有数字或出了对角线,则向下移一格继续填写)。

其实斜步法可以向4个方向依次填写数字,即右上、右下、左上、左下4个方向,每种斜步都可有2种跳步,即左(右)跳步、上(下)跳步。

对于X+Y斜步相应的跳步可以为-X,-Y。

【记住,跳步是X+Y斜步的X(或Y)相反方向即可。

如右上方向斜步,跳步就为向左(或向下)一步;左下方向斜步,跳步就为向右(或向上)一步;等等等等】二、loubere法生成奇阶幻方在居中的方格向上一格内放1,依次向右上方填入2、3、4…,如果右上方已有数字,则向上移两格继续填写。

如下图用Louberel法生成的5阶幻方:23 6 19 2 1510 18 1 14 2217 5 13 21 94 12 25 8 1611 24 7 20 3上述loubere法可以记作X+Y斜步(数字按右上方顺序填入),2Y跳步(如果右上方已有数字或出了对角线,则向上移二格继续填写)。

幻方的构造

幻方的构造

幻方的构造所谓幻方(magic square),也叫纵横图,就是在n×n的方阵中,放入从1开始的n2个自然数;在一定的布局下,其各行、各列和两条对角线上的数字之和正好都相等。

这个和数就叫“幻方常数”或“幻和”。

对于任意n阶的幻方来说,其幻方常数S和方阵阶数n的关系是:1n(n2+1)S=2例如3阶的幻方常数是15,4阶的幻方常数是34,5阶的幻方常数是65……那么,如何构造幻方呢?下面我们分几种情况分别进行说明:一、奇数阶幻方奇数阶幻方,也就是幻方阶数为奇数的幻方,如:3阶、5阶、7阶……幻方,那么如何构造这样的幻方呢?对所有奇数阶幻方的构造,我们都可以采取“连续摆数法”,其法则如下:把“1”放在中间一列最上边的方格中,从它开始,按对角线方向(比如说按从左下到右上的方向)顺次把由小到大的各数放入各方格中,如果碰到顶,则折向底,如果到达右侧,则转向左侧,如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。

按照这一法则构成5阶幻方的示例如下图:按上述法则构成11阶幻方如下图:二、4阶幻方构造4阶幻方我们可以采取“对角线法”,即首先按从上到下、从右向左(也可按从左到右、从上到下)的次序把1—16填入4阶方阵中,然后将两条主对角线上元素按中心轴对称原则互相交换就行,也就是1和16互换、6和11互换、4和13互换、7和10互换,见下图:三、6阶幻方构造6阶幻方,我们可以采用“斯特雷奇法”,即首先将6阶幻方分成ABCD四个3阶幻方,然后按ABCD的顺序将每个3阶幻方用“连续摆数法”填上,3阶方阵A填数字1—9,B填10—18,C填19—27,D填28—36,如下图:然后将A中的8、5和4分别和D中的35、32和31交换,形成6阶幻方,如下图:四、双偶数阶幻方双偶数阶幻方,即n=2·2m形式的幻方,我们可以采取“对称法”(symmetrical method)。

即将双偶数阶幻方分成上、下、左、右4个小方阵,首先在左上角方阵中布点:每行每列任取一半方格打上“○”号;然后向其余3个方阵映象,使每个小方阵中各有一半方格被“○”所占据。

幻方解法整理归纳之欧阳道创编

幻方解法整理归纳之欧阳道创编

在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为“幻方”。

我国古代称为“河图”、“洛书”,又叫“纵横图”。

1、奇数阶幻方——罗伯特法(也有人称之为楼梯法)(如图一:以五阶幻方为例)奇数阶幻方n为奇数(n=3,5,7,9,11……) (n=2×k+1,k=1,2,3,4,5……)奇数阶幻方最经典的填法是罗伯特法(也有人称之为楼梯法)。

填写办法是这样:把1(或最小的数)放在第一行正中;按以下规律排列剩下的n×n1个数:(1)每一个数放在前一个数的右上一格;(2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;(3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;(4)如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;(5)如果这个数所要放的格已经有数填入,处理办法同(4)。

这种写法总是先向“右上”的标的目的,象是在爬楼梯。

口诀:1居首行正中央,依次右上莫相忘上出格时往下放,右出格时往左放.排重便往自下放,右上出格一个样图一2、单偶数阶幻方()122+=m n ——分区调换法(如图二:以六阶幻方为例)① 把()122+=m n 阶的幻方均分红4个同样的小幻方A 、B 、C 、D(如图二)图二(注意A 、B 、C 、D 的相对位置不克不及修改,因为12+m 为奇数,所以A 、B 、C 、D 均为奇数阶幻方) ② 用连续摆数法在A 中填入21a ——构成幻方,同理,在B 中填入()2221a a ——+、在C 中填入()22312a a ——+、在D 中填入()22413a a ——+均构成幻方(2n a =)(如图三) 图三(因为12+m 为奇数,所以A 、B 、C 、D 均为奇数阶幻方,必定可以用连续摆数法构造幻方)③ 在A 的中间一行上从左侧的第二列起取m 个方格,在其它行上则从左侧第一列起取m 个方格,把这些方格中的数与D 中相应方格中的数字对换(如图四):图四不管是几阶幻方,在A 中取数时都要从中间一行的左侧第二列开始;因为那时6=n ,1=m ,所以本例中只取了一个数)④ 在A 中从最右一列起在各行中取1-m 个方格,把这些方格中的数与D 中相应方格中的数字对换。

幻方罗伯法证明方法

幻方罗伯法证明方法

幻方罗伯法证明方法幻方,这玩意儿可神奇啦!就像一个神秘的魔法盒子,里面藏着无尽的奇妙。

而罗伯法呢,就是打开这个魔法盒子的一把钥匙。

咱先来说说幻方是啥。

简单来讲,就是把一些数字巧妙地排列在一个方阵里,让每行、每列和对角线上的数字之和都相等。

这就好比是一场数字的大派对,每个数字都要找到自己最合适的位置,才能让整个派对热闹而和谐。

那罗伯法是怎么做到让这些数字乖乖听话,排列出完美幻方的呢?这可就得好好研究研究啦。

你看啊,罗伯法就像是一个聪明的指挥家,它指挥着数字们依次就座。

先从第一行中间那个位置开始,这就是整个幻方的起点。

然后呢,数字们就一个一个地按照一定的规则排下去。

比如说,下一个数字要放在右上方,如果右上方已经有数字了,那就放到下方。

这就好像是数字们在玩跳房子游戏,一格一格地跳着,找到自己的落脚点。

这听起来是不是很简单?但这里面可藏着大学问呢!就好像解一道超级复杂的谜题,每一步都要小心翼翼,不能出错。

想象一下,这些数字就像是一群调皮的小孩子,要让他们乖乖听话,按照罗伯法的规则来排列,可不是一件容易的事啊。

但一旦排列成功,哇,那感觉就像是创造了一个小小的奇迹。

咱们来具体分析分析罗伯法的神奇之处。

它为什么能这么准确地让数字们排列成幻方呢?这背后其实有着深刻的数学原理。

就好像是一条隐藏在数字世界里的秘密通道,只有通过罗伯法,我们才能找到它。

比如说,通过罗伯法排列出来的幻方,它的对称性是非常美妙的。

每一行、每列和对角线都像是一面镜子,反射出同样的和谐与完美。

这难道不是数学的魅力所在吗?而且啊,罗伯法可不是随便想出来的,那是经过无数数学家们的努力和探索才发现的。

他们就像是一群勇敢的探险家,在数字的海洋里寻找着宝藏,而罗伯法就是他们找到的最珍贵的宝藏之一。

你说,这多有意思啊!一个小小的罗伯法,却能让我们看到数学的博大精深。

它就像是一把钥匙,打开了幻方这个神秘世界的大门,让我们可以尽情地探索其中的奥秘。

总之,幻方罗伯法证明方法真的是太神奇啦!它让我们感受到了数学的无穷魅力,也让我们对这个世界有了更深的理解。

幻方常规解法汇总

幻方常规解法汇总

幻方常规解法汇总按目前填写幻方的方法,是把幻方分成了三类,即奇数阶幻方、双偶阶幻方、单偶阶幻方。

下面按这三类幻方,列出最常用解法(考试用,不求强大,只求有效!)。

奇数阶幻方(罗伯法)奇数阶幻方最经典的填法是罗伯法。

填写的方法是:把1(或最小的数)放在第一行正中;按以下规律排列剩下的(n×n-1)个数:1、每一个数放在前一个数的右上一格;2、如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;3、如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;4、如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内;5、如果这个数所要放的格已经有数填入,那么就把它放在前一个数的下一行同一列的格内。

例,用该填法获得的5阶幻方:双偶数阶幻方(对称交换法)所谓双偶阶幻方就是当n可以被4整除时的偶阶幻方,即4K阶幻方。

在说解法之前我们先说明一个“互补数”定义:就是在n 阶幻方中,如果两个数的和等于幻方中最大的数与1 的和(即n×n+1),我们称它们为一对互补数。

如在三阶幻方中,每一对和为10 的数,是一对互补数;在四阶幻方中,每一对和为17 的数,是一对互补数。

双偶数阶幻方的对称交换解法:先看看4阶幻方的填法:将数字从左到右、从上到下按顺序填写:内外四个角对角上互补的数相易,(方阵分为两个正方形,外大内小,然后把大正方形的四个对角上的数字对换,小正方形四个对角上的数字对换)即(1,16)(4,13)互换(6,11)(7,10)互换即可。

对于n=4k阶幻方,我们先把数字按顺序填写。

写好后,按4×4把它划分成k×k个方阵。

因为n是4的倍数,一定能用4×4的小方阵分割。

然后把每个小方阵的对角线,象制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成幻方。

以8阶幻方为例:(1) 先把数字按顺序填。

关于构造任意奇数阶幻方的新方法

关于构造任意奇数阶幻方的新方法

关于构造任意奇数阶幻方的新方法作者:周小安赵宇来源:《智能计算机与应用》2017年第06期摘要:关键词:中图分类号:文献标志码: A文章编号: 2095-2163Abstract: Magic square originated thousands of years ago in China,which is one of the research objects of combinatorial designs. In a square matrix,if the sums of every row,every column and two diagonals are equal, this square matrix is called magic square. Currently, the achievements in the research of magic square have been widely used in image encryption,image scrambling,etc. This paper introduces a new continuous numbering method to structure arbitrary odd order magic square,which is more flexible than traditional construction methods.The new method can not only increase the forms of odd order magic square, but also parallelly structure magic square and reduce the time of structuring it.0引言幻方具有非常悠久的历史,虽然古老但却是最流行的数字游戏之一。

幻方常见方法汇总

幻方常见方法汇总

幻方常规解法汇总
幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。

单偶数阶幻方(象限对称交换法)
以n=10为例,10=4×2+2,这时k=2
(1)把方阵分为A,B,C,D四个象限,这样每一个象限肯定是奇数阶。

用罗伯法,依次在A象限,D象限,B象限,C象限按奇数阶幻方的填法填数。

(2)在A象限的中间行、中间格开始,按自左向右的方向,标出k格。

A象限的其它行则标出最左边的k格。

将这些格,和C象限相对位置上的数,互换位置。

(3)在B象限任一行的中间格,自右向左,标出k-1列。

(注:6阶幻方由于k-1=0,所以不用再作B、D象限的数据交换),将B象限标出的这些数,和D象限相对位置上的数进行交换,就形成幻方。

下面是6阶幻方的填法:6=4×1+2,这时k=1。

幻方算法

幻方算法

幻方算法首先,奇数的幻方,第一行中间放1,然后依次2、3、4一直往右上填,越界则反向,如果该位置有了数字,则排在前一个数的下面。

原则:非右上则下其次,4的倍数的的幻方。

设N%4等于0,则以每个4*4画对角,不在对角线上的数字与相对应数字对换。

比如8*8的,(0,1)与(7,6)对换,类推。

原则:横竖下标对N比余,相等或相加等于3则忽略,不做对换最后,最复杂的最后一种情况,单偶数的幻方。

我找了资料,但是没有完全好用的,总有缺陷概念:N=4m+2方法1:ACDB按上图将其分为4个部分,分别填入1-N*N/4组成的奇数幻方,N*N/4+1-N*N/2组成的奇数幻方,N*N/2+1-N*N/4*3组成的奇数幻方,N*N/4*3-N*N组成的奇数幻方将AD中m列互换。

不是镜面互换,而是平移。

将BC中m-1列互换,同上。

方法2:LUX法L U X41 14 1423 23 32先做一个N/2的奇数幻方,然后把这个幻方的每个数x替换成一个田字的四个数(x-1)*4+1——x*4这四个数的排列顺序有3种,前m+1行的按L排列,后m-1行的按X排列,中间一行中间一列按L排列,其余的按U排列。

下面是我写的JAVA实现类,2种单偶数我都实现了(第一种方法的实现被我注释掉了),还有一个监测的方法,仅供参考。

public class HuanClass {private int N;private int SUM;private int MAX;private int[][] RE;public HuanClass(int val) throws Exception{N=val;MAX=N*N;if(MAX%2==1)SUM=(MAX+1)/2*N;else SUM=(MAX+1)*N/2;RE=new int[N][N];if(N<3)throw new Exception("shit");else if(N%2==1)RE=CountOdd(N);else if(N%4==0)CountFour();elseCountEven();}private int[][] CountOdd(int n){int[][] IRE=new int[n][n];int i=0;int j=n/2;int tmp=1;while(true){if(j>=n)j=0;if(i<0)i=n-1;if(IRE[i][j]==0){IRE[i--][j++]=tmp++;}else{i+=2;j--;if(j<0)j=n-1;if(i>=n)i=i%n;if(IRE[i][j]==0)IRE[i--][j++]=tmp++;else break;}}return IRE;}private void CountFour(){int fillCount=1;for(int i=0;i<N;i++){for(int j=0;j<N;j++){RE[i][j]=fillCount;fillCount++;}}int tmp;for(int i=0;i<N;i++){for(int j=0;j<N/2;j++){if(i%4!=j%4&&(j%4+i%4)!=3){tmp=RE[i][j];RE[i][j]=RE[N-i-1][N-j-1];RE[N-i-1][N-j-1]=tmp;}}}}/*private void CountEven(){int halfN=N/2;int[][] tmpIArr=CountOdd(halfN);for(int i=0;i<halfN;i++){for(int j=0;j<halfN;j++){RE[i][j]=tmpIArr[i][j];RE[i+halfN][j]=tmpIArr[i][j]+halfN*halfN*3;RE[i][j+halfN]=tmpIArr[i][j]+halfN*halfN*2;RE[i+halfN][j+halfN]=tmpIArr[i][j]+halfN*halfN; }}int m=(halfN-1)/2;int tmp;for(int j=0;j<m;j++){for(int i=0;i<halfN;i++){tmp=RE[i][j];RE[i][j]=RE[i+halfN][j];RE[i+halfN][j]=tmp;if(j<m-1){tmp=RE[i][j+halfN];RE[i][j+halfN]=RE[i+halfN][j+halfN];RE[i+halfN][j+halfN]=tmp;}}}}*/private void CountEven(){int halfN=N/2;int m=(halfN-1)/2;int[][] Seq=CountOdd(halfN);char[][] SeqSign=new char[halfN][halfN]; for(int i=0;i<SeqSign.length;i++){for(int j=0;j<SeqSign[i].length;j++){ SeqSign[i][j]='L';}}int i=halfN-1;for(int l=1;l<m;l++,i--){for(int j=0;j<halfN;j++){SeqSign[i][j]='X';}}for(int j=0;j<halfN;j++){if(j==halfN/2)SeqSign[i][j]='L';elseSeqSign[i][j]='U';}for(i=0;i<halfN;i++){for(int j=0;j<halfN;j++){int beginNum=(Seq[i][j]-1)*4;switch (SeqSign[i][j]){case 'L':RE[i*2][j*2]=beginNum+4;RE[i*2+1][j*2]=beginNum+2;RE[i*2][j*2+1]=beginNum+1;RE[i*2+1][j*2+1]=beginNum+3;break;case 'U':RE[i*2][j*2]=beginNum+1;RE[i*2+1][j*2]=beginNum+2;RE[i*2][j*2+1]=beginNum+4;RE[i*2+1][j*2+1]=beginNum+3;break;case 'X':RE[i*2][j*2]=beginNum+1;RE[i*2+1][j*2]=beginNum+3;RE[i*2][j*2+1]=beginNum+4;RE[i*2+1][j*2+1]=beginNum+2;break;}}}}public int[][] getHuan(){return RE;}public boolean check(){for(int i=0;i<N;i++){int tmpSum1=0;int tmpSum2=0;for(int j=0;j<N;j++){tmpSum1+=RE[i][j];tmpSum2+=RE[j][i];}if(tmpSum1!=SUM||tmpSum2!=SUM)return false;}int sum1=0,sum2=0;for(int i=0;i<N;i++){sum1+=RE[i][i];sum2+=RE[i][N-1-i];}if(sum1!=SUM||sum2!=SUM)return false;return true;}}幻方维基百科,自由的百科全书跳转到: 导航, 搜索幻方,有时又称魔方(该称呼现一般指立方体的魔術方塊)或纵横图,由一组排放在正方形中的整数组成,其每行、每列以及两条对角线上的数之和均相等。

幻方问题[大全]

幻方问题[大全]

幻方问题[大全]第一篇:幻方问题[大全]幻方问题据说很早以前,夏禹治水时,河南洛阳附近的大河里浮出了一只乌龟,背上有一个很奇怪的图形,古人认为是一种祥瑞,预示着洪水将被夏禹王彻底制服。

后人称之为“洛书”或“河图”。

如果把图形改成现在通行的阿拉伯数字,就成了下图的样子。

2 5 71 6我们注意到左面的图形中,九个数字正好是从1到9,既无重复,也没有遗漏,所有横竖线与对角线之和相等。

此类图形成为幻方图形,图中给出的为三阶幻方。

选择合适算法,使用计算机生成不同阶的幻方。

解法分析:#include using namespace std;对平面魔方的构造,分为三种情况:N为奇数、N为4的倍数、N为其它偶数(4n+2的形式)⑴ N 为奇数时,最简单(1)将1放在第一行中间一列;(2)从2开始直到n×n止各数依次按下列规则存放,按45°方向行走,如向右上每一个数存放的行比前一个数的行数减1,列数加1(3)如果行列范围超出矩阵范围,则回绕。

(4)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

程序:int ABC1(int n)//当n为奇数的时候生成的幻方{int i,j,k;int **a=new int*[n];for(i=0;ifor(i=0;ifor(j=0;j}} j++;if(i==n-1&&j==n-1){ i++;a[i][j]=k;} if(i<0)i=n-1;if(j>n-1)j=0;if(a[i][j]==0)a[i][j]=k;else {} i++;if(i>n-1)i=0;j--;if(j<0)j=n-1;i++;if(i>n-1)i=0;a[i][j]=k;break;} for(i=0;i} for(j=0;j⑵ N为4的倍数时(采用对称元素交换法。

)首先把数1到n×n按从上至下,从左到右顺序填入矩阵然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对称交换,即a(i,j)与a(n-1-i,n-1-j)交换,所有其它位置上的数不变。

幻方解法归纳

幻方解法归纳

在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行及的几个数之和都相等,具有这种性质的图表,称为“幻方”.我国古代称为“”、“”,又叫“”.1、奇数阶幻方——罗伯特法也有人称之为楼梯法如图一:以五阶幻方为例奇数阶幻方n 为奇数 n=3,5,7,9,11…… n=2×k+1,k=1,2,3,4,5……奇数阶幻方最经典的填法是罗伯特法也有人称之为楼梯法.填写方法是这样: 把1或最小的数放在第一行正中; 按以下规律排列剩下的n×n -1个数: 1每一个数放在前一个数的右上一格;2如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列; 3如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;4如果这个数所要放的格已经超出了顶行且超出了最右列,那么就把它放在前一个数的下一行同一列的格内; 5如果这个数所要放的格已经有数填入,处理方法同4. 这种写法总是先向“右上”的方向,象是在爬楼梯.口诀:1居首行正中央, 依次右上莫相忘 上出格时往下放, 右出格时往左放. 排重便往自下放, 右上出格一个样图一2、单偶数阶幻方()122+=m n ——分区调换法如图二:以六阶幻方为例① 把()122+=m n 阶的幻方均分成4个同样的小幻方A 、B 、C 、D 如图二图二注意A 、B 、C 、D 的相对位置不能改变,因为12+m 为奇数,所以A 、B 、C 、D 均为奇数阶幻方 ② 用连续摆数法在A 中填入21a ——构成幻方,同理,在B 中填入()2221a a ——+、在C 中填入()22312aa ——+、在D 中填入()22413a a ——+均构成幻方2na =如图三图三因为12+m 为奇数,所以A 、B 、C 、D 均为奇数阶幻方,必然可以用连续摆数法构造幻方 ③ 在A 的中间一行上从左侧的第二列起取m 个方格,在其它行上则从左侧第一列起取m 个方格,把这些方格中的数与D 中相应方格中的数字对调如图四:图四不管是几阶幻方,在A 中取数时都要从中间一行的左侧第二列开始;因为当6=n 时,1=m ,所以本例中只取了一个数④ 在A 中从最右一列起在各行中取1-m 个方格,把这些方格中的数与D 中相应方格中的数字对调.如图五图五3、双偶数阶幻方m n 4=——轴对称法如图三:以八阶幻方为例 ① 把m n 4=阶的幻方均分成4个同样的小幻方如图六图六② 在左上角的小幻方每行每列中任取一半的方格加上底色以便于区分,然后以轴对称的形式在其它三个小幻方中标出方格如图七图七正确理解“每行每列中任取一半的方格”.本例中因为4=m ,所以在每个小幻方的每行每列上均取2个方格③ 从左上角的方格开始,按从左到右、从上到下的次序将1——64从小到大依次填入n 阶幻方,遇到有底色的方格跳过,计数,这样填满了没有底色的方格如图八图八从左上角开始按从左到右、从上到下的次序将1——64从小到大依次填入n 阶幻方,当遇到有底色的方格时空出不填即可④ 从右下角的方格开始,按从右到左、从下到上的次序将剩下的数从小到大依次填入n 阶幻方,这样填满了有底色的方格如图九图九即为所求幻方.图九或者对于n=4k 阶幻方,我们先把数字按顺序填写.写好后,按44把它划分成kk 个方阵.因为n 是4的倍数,一定能用44的小方阵分割.然后把每个小方阵的对角线,象制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成幻方.图中红色数字可用中心对称得到。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任意奇数幻方的米字平衡法
范贤荣2016.2.22
我用此法已排好奇数3至25阶的幻方。

现与幻友们共享与交流。

画至25阶,就把A4纸排满了。

继续画就得用更大的纸。

因此,我就搁笔了。

从图中可以看出大于25阶的任意奇数幻方都可以按照本方法画出。

此法的口诀是:
中数居中最要紧,斜上楼梯爬到顶,直落腰间接着填,横角垂直三跟进。

米字形成分四区,一二三四各领军,两两相差都为四,纵横各自找平衡。

注:中数——即中位数。

三跟进——即横、角、直的连续旋转。

还有单方向的递进也是级差3。

平衡——即找互补数。

互补数——即两数相加等于两倍中位数的
那两个数。

幻和——即幻方的纵、横和对角线各自相加都相等的那个数。

具体排法,以7阶幻方为例,画图如下:
现把3至25阶的幻方陈列如后。

相关文档
最新文档