- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
奇数阶幻方
三阶幻方的解法
第一种:杨辉法:九子斜排,上下对易,左右相更,四维挺出。
1
2???4
3???5??7
????6??8
??????9
?
2 9 4
7 5 3
6 1 8
第二种:九宫图也是幻方的别称,三阶幻方就是著名的洛书,他的排列是::“戴九履一,左三右七,二四为肩,六八为足,五居中央(9在上中,1在下中。7在左中,3在右中,2在左上,4在右上,6在左下,8在右下,正中央5)
第三种:罗伯法:最小的数据上行中央,依次向右上方斜填,上出框往下写,右出框往左填,排重便在下格填,右上排重一个样
8 1 6?3 5 7?4 9 2
四阶幻方的解法
1、先把这16个数字按顺序从小到到排成一个4乘4的方阵
2、内外四个角对角上互补的数相易,(方阵分为两个正方形,外大内小,然后把大正方形的四个对角上的数字对换,小正方形四个对角上的数字对换)即(1,16)(4,13)互换(6,11)(7,10)互换
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1另:对于n=4k阶幻方,我们先把数字按顺序填写。写好后,按4*4把它划分成k*k个方阵。因为n是4的倍数,一定能用4*4的小方阵分割。然后把每个小方阵的对角线,象制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成幻方。
五阶幻方的解法:罗伯法:最小的数据上行中央,依次向右上方斜填,上出框往下写,右出框往左填,排重便在下格填,右上排重一个样。
17 24 1 8 15?23 5 7 14 16?4 6 13 20 22?10 12 19 21 3?11 18 25 2 9
?
(在最上一行的中间填1,接着在1的右上方填2,由于1在最上一行,?所以1的右上方应该是第五行的第四个,?接下来在2的右上方填3,3的右上方应该是第三行第一个,所以在此填4,在4的右上方填5,?在5的下方填6,接着按前面五个数的填法依次填7,8,9,10;?在10的下方填11,然后按上面的方法填,?每次填五个数,直到完成.?无论从上到下还是从左到右都是五排,?所以每排的五个数之和为(1+2+3+4+…+25)÷5=65,?因此,你可以验算一下是否每个和都是65.?此法适合于一切奇阶幻方.)
?
罗伯法
用罗伯法构造幻方 :幻方是一种广为流传的数学游戏,据说早在大禹治水时就发现过。幻方的特点是:由自然数构成n×n正方形阵列,称为n阶幻方,每一行、每一列、两对角线上的数之和相等。当n为奇数时,我们称幻方为奇阶幻方。法国人罗伯总结出了构造奇数阶连续自然数幻方的简单易行的方法“罗伯法”。下图就是一个用罗伯法排好的5阶幻方。
罗伯法的助记口诀:
(初学者可先画出一个N×N的方格阵)
1??居上行正中央——数字 1 放在首行最中间的格子中
依次斜填切莫忘——向右上角斜行,依次填入数字
上出框界往下写——如果右上方向出了上边界,就以出框后的虚拟方格位置为基准,将数字竖直降落至底行对应的格子中
右出框时左边放——同上,向右出了边界,就以出框后的虚拟方格位置为基准,将数字平移至最左列对应的格子中
重复便在下格填——如果数字{N} 右上的格子已被其它数字占领,就将{N+1} 填写在{N}下面的格子中
右上重复一个样——如果朝右上角出界,和“重复”的情况做同样处理罗伯法的具体方法如下:
把1(或最小的数)放在第一行正中;
按以下规律排列剩下的n2-1个数:
1)每一个数放在前一个数的右上一格;
2)如果这个数所要放的格已经超出了顶行那么就把它放在底行,仍然要放在右一列;
3)如果这个数所要放的格已经超出了最右列那么就把它放在最左列,仍然要放在上一行;
4)如果这个数(例如6)所要放的格已经超出了顶行且超出了最右列那么就把它放在前一个数(例如5)的下一行同一列的格内;
5)如果这个数所要放的格已经有数填入,处理方法同4)。
只要是有规律的东西,计算机很容易就可以做到。
下面我们把罗伯法翻译成计算机算法思路:
定义一个n×n数组;
把1放在第0行第n\2列;
设当前格为(i?j),设一步长变量k(k=2-n?n)
1) i减1,j加1;
2) 如果i0那么i=n-1;
3) 如果jn-1那么j=0;
4) 如果2)和3)同时出现那么就把j减回1,i加上2;
5) 如果a(i?j)不为空那么按照4)处理;
6) 把k的值赋给当前格a(i?j);
文档评论(0)