任意奇数阶幻方最简单公式做法
- 格式:docx
- 大小:15.79 KB
- 文档页数:3
任意奇数阶幻方的杨辉斜排法——对杨辉口诀的讨论范贤荣2016.3.8关于三阶幻方的排法,我国古代数学家杨辉给出了一个巧妙的排法:“九子斜排,上下对易,左右相更,四维挺出”。
按照这个口诀,画出“上下对易,左右相更”之后,形成图1d的图面。
因此,必定有一个“四维挺出”的步骤。
最后得到“戴九履一,左三右七,二四為肩,六八為足”的三阶幻方。
见图1。
图1 杨辉口诀的画法可见,杨辉口诀是在利用5×5的方格,斜排9个数后,按照他的步骤,仍然是画出5×5方格的3阶的幻方,如图1e。
图2 菱中取方的画法现在,我们很多人用的是“取方框”画法。
即在5×5的方阵中,取出3×3方框来,如图2b的红框。
红框外的1,是走到框内的绿方块中,红框外的9,是走到框内的蓝方块中。
因此1、9没有“对易”。
同样,3、7也没有“相更”。
因此,就没有“上下对易,左右相更”了。
所以,就不需要“四维挺出”了。
因此,现在的画法,与原来的口诀不一致了。
所以,我根据作图的次序,将杨辉的口诀,演绎成:各子斜排为菱形,中间取方当作城,城外有子城内空,四围都往城中进。
挺进多少方可止,几阶就挺几步深。
注1:“四围”就是上下左右四边。
“都往城中进”,因此是相向而行,都到城中。
注2:“几阶就挺几步深”。
如3阶进3步,5阶进5步,7阶进7步……后续亦如此类推。
见图2。
下面,我将2~13各奇数阶,由菱方阵演变成幻方的情况,列于后。
图3 5阶菱方阵与幻方图4 7阶菱方阵与幻方图5 9阶菱方阵与幻方图6 11阶菱方阵与幻方图7 11阶幻方图8 13阶菱方阵图9 13阶幻方。
初一幻方的规律和方法
以下是一种适用于奇数阶幻方的规律和方法:
1. 把“1”放在中间一列最上边的方格中。
2. 从这个“1”开始,按对角线方向顺次把由小到大的各数放入各方格中,如果碰到顶则折向底,如果到达右侧则转向左侧,如果进行中轮到的方格中已有数或到达右上角,则退至前一格的下方。
例如,如果构建一个5阶幻方,那么根据以上方法可以得到:
以上步骤只是一个简单的记忆口诀,并不代表全部的方法。
如果你有任何关于如何构造幻方的具体问题,请告诉我,我会尽力帮助你。
奇数阶幻方构造原理
奇数阶幻方是指由1到n^2 的连续整数构成的方阵,其每行、每列及两条对角线上的数字之和都相等。
以下是奇数阶幻方构造的一些原理和方法:
- 九子排列法:宋代数学家杨辉总结的“洛书”幻方的编排方法。
具体步骤为:九子排列、上下对易、左右相更、四维挺出。
- 巴舍法:以构造三阶幻方为例,假设有一个三行三列的格子,然后制造阳台、天台、地下室,再爬梯填数,最后把阳台、天台、地下室及里边的数去掉,就得到了一个三阶幻方。
- 罗伯法:可以构造出所有的奇数阶幻方。
口诀为:1居上行正中央,依次斜填切莫忘;上出框界往下写,右出框界左边放;排重便在下格填,右上出格一个样。
这些方法可以帮助构造各种奇数阶幻方,有兴趣的读者可以尝试用这些方法构造五阶幻方和七阶幻方。
奇数阶幻方的杨辉方法从三阶幻方谈起。
三阶幻方是指将1,2,3,…,8,9这九个数排列成一个3×3方阵,使三横行、三竖列和两条对角线上的三个数之和都相等。
这个相等的和数就叫做三阶幻方的幻和。
我们很容易求得这个幻和:。
1289451533++++== 要排出一个三阶幻方,中心这个数是一个关键。
这个数有四条线通过它,为此,我们把三数之和为的算式全部列出来:15,,,,1+5915+=16815++=A A 2+A 5815+=A 2+A 6A 715+=,,,。
34815++=A A 3+5715+=24915++=A A 4+A 5615+=A (一共八个式子,幻方的三行、三列和两条对角线也正好是八个,所以上列八个式子正好表示行、列和对角线上的组成情形。
)这个数在上列八个式子中出现了四次,这表明中心5数就是。
中心这个数定好之后,再确定四个角上的数,每个角上的数有三条线通过它,5这四个数在上列八个式子中各出现了三次,由此我们可以确定四个角上的数就是2,4,6,8这四个数。
首先可以任意指定某一个角是,那么与构成对角2,4,6,822线的另一端只能是;余下的两个角就是。
中心和四角这五个数确定84,6之后,余下的四个数不难计算求得。
图1给出了三阶幻方的一个示例。
关于三阶幻方的排法,我国古代数学家杨辉给出了一个巧妙的排法:九子斜排,上下对易,左右相更,四维挺进。
参见图2。
如图2所示,它形象的表达了杨辉的方法。
这个方法可以变通一下:“上下对易,左右相更”改为上、下、左、右的各个元素各向对方移动三格,这样不仅可以省去“四维挺进”,而且最后得到的方阵是一个标准的方阵。
33⨯参见图3。
杨辉的方法不仅可以构造三阶幻方,而且还可以构造图 1987654321176852349图2428637915图 3任意奇数阶幻方。
杨辉的方法:设为奇数。
n 1.将排成一个斜的方阵;221,2,3,,1,n n - n n ⨯2.以为中心作一个方阵(格);212n +n n ⨯3.将位于这个方阵外的所有元素都向方阵内平移格,即得。
幻方的算法—Merzirac法生成奇阶幻方奇阶幻方当n为奇数时,我们称幻方为奇阶幻方。
可以用Merzirac法与loubere法实现,Merzirac法与loubere 法称为斜步法,即向斜方向走一步;也可用国际象棋之马步也可构造出更为神奇的奇幻方,故命名为horse法,即马步法。
下面我详细介绍Merzirac法Merzirac法生成奇阶幻方Merzirac法最简单的方法为:1、在第一行居中的方格内放1 ;2、以后按顺序,向右斜上方填写数字(称为斜步);3、若出到方阵上方,把该数字填到本该所在列的最下格;4、若出到方阵右方,把该数字填到本该所在行的最左格;5、若右上已有数字,或出到方阵右上(即对角线方向),则把数字填入上一个数字的下一格,即在n 的下方放入n+1(称为跳步),再按上述方法放置到2n,在2n的下方放入2n+1,在3n的下方放入3n+1,……依次填完所有数字即可完成任何一个奇阶幻方。
下面是用此方法构成的5阶幻方,每一行、每一列、对角线的和都为65,我们将此和值称为幻和值,用f(n)表示,f(5)=65。
65656565656565 65 65 65 65 65斜步法可以向4个方向依次填写数字,即右上、右下、左上、左下4个方向,每种斜步都可有2种跳步,即左(右)跳步、上(下)跳步。
下面我总结所有的Merzirac法(斜步法):我们用坐标轴的方法,将左右方向设为X轴,向右为X,向左为-X;将上下方向设为Y轴,向上为Y,向下为-Y。
一般的,令矩阵[1,1]为向右走一步,向上走一步,用X+Y表示,,[-1,0]为向左走一步,用-X表示,[0,-1]为向下走一步,用-Y表示。
则斜步可以表示为X+Y,{X∈{[1,0], [-1,0]},Y∈{[0,1], [0,-1]}}∪{Y∈{[1,0], [-1,0]},X∈{[0,1], [0,-1]}}。
对于X+Y相应的跳步可以为-X,-Y。
那么上面的5阶幻方就是用X+Y斜步(即右上一步),-Y跳步(即向下一步)构成。
幻方问题公式
幻方是一个由数字组成的正方形阵列,其中每行、每列和每个对角线的数字之和都是相同的。
以下是幻方的计算公式:
对于任意n阶幻方,每行、每列和每个对角线的数字之和可以用以下公式表示:
S = n(n^2 + 1) / 2
其中,n是幻方的阶数。
当n为奇数时,称为奇阶幻方。
当n为偶数时,幻方分为双偶幻方和单偶幻方。
对于奇阶幻方,可以使用Merzirac法生成。
具体步骤如下:
1. 在第一行居中的方格内放1,依次向右上方填入2、3、4…。
2. 如果右上方已有数字,则向下移一格继续填写。
3. 如果出到方阵下方,把该数字填到本该填数所在列上方相应的格。
4. 如果出到方阵右方,把该数字填到本该填数所在行的左方相应的格。
5. 如果落步格已有数字,则向上移一格继续填写。
对于偶阶幻方,可以使用以下公式计算每行、每列和每个对角线的数字之和:S = n(n/2)^2 + (n/2)^2
其中,n是幻方的阶数。
幻方算法首先,奇数的幻方,第一行中间放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;}}幻方维基百科,自由的百科全书跳转到: 导航, 搜索幻方,有时又称魔方(该称呼现一般指立方体的魔術方塊)或纵横图,由一组排放在正方形中的整数组成,其每行、每列以及两条对角线上的数之和均相等。
幻⽅算法(转)幻⽅的算法(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阶幻⽅。
在一个由若干个排列整齐的数组成的正方形中,图中任意一横行、一纵行及对角线的几个数之和都相等,具有这种性质的图表,称为“幻方"。
我国古代称为“河图”、“洛书",又叫“纵横图”。
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 中相应方格中的数字对调。
任意奇数阶幻方的奇偶分合法
范贤荣2016.3.12
这种方法也叫康韦法、菱形法。
该法在网上介绍的少,例如王炳坤ABC先生写的《幻方(二)奇数阶幻方的编排方法》一文中也只介绍了“九子排列法”、“罗伯法”和“巴舍法”三种。
所以。
我向大家作一介绍。
康韦法的要点是:先将数列分为奇、偶两部分,即先“分”。
再将这两部分按照该法提供的方法排列。
最后,将这两部分“合”起来。
所以,我说:该法称之为“奇偶分合法”还比较恰当。
根据我填写的经验,将该法的口诀表述如下:
先将奇数排成菱,
再把偶数列成井,
把井分为四部分。
填满菱角幻就成。
操作方法
1)奇数成菱把“1、3、5……”填入红菱区
3)偶数成井把“2、4、6……”填入绿井区
4)井分为四用细小的井字(如图中双线),把偶数区域分成四份的
5)填满菱角按照罗伯法则:下到上,右到左,顶角到对角。
注:
1)具体填写时,为了填写的方便,先列出一菱形一井字的空格(如彩色区域,红菱、绿井)。
2)填写时,要斜上填。
3)井字的理解:以5阶为例,5阶的井字非常明显,就是两横两竖。
所以,以它为代表,列入口诀。
7阶以后,井字,就权当把它们分成四份的那个细小的井字(如图)。
现将我填写的情况陈列于后:
3阶
5阶(5阶井字最明显。
因此,以它为代表)
7阶
9阶
11阶。
奇数阶幻方求解技巧奇数阶幻方是一种特殊的方阵,其中的所有数字从1到$n^2$(n为方阵的阶数)连续排列,并且所有行、列和对角线的和相等。
求解奇数阶幻方的问题是一个古老而有趣的数学难题。
虽然没有一种通用的方法可以适用于所有的奇数阶幻方,但是有一些技巧和规则可以帮助我们更好地解决这个问题。
1. 规则1:确定中间数奇数阶幻方的中间数一定是$n^2$的一半,即$(n^2 + 1) / 2$。
由于幻方中所有行、列和对角线的和相等,所以可以将中间数放置在中间行的中间列(例如n=3时,中间数5可以放在第2行第2列的位置)。
2. 规则2:填充右上角从幻方的第一行开始,从中间数位置的右上方开始填充数字。
如果遇到边界,则继续填充到相应的对角边界处。
例如,当填充n=3的幻方时,从2的右上方(即第一行第二列的位置)开始填充,然后填充到第一行的右边界,继续填充到第一个位置(即第三行第一列的位置)。
3. 规则3:填充左下角从幻方的最后一行开始,从中间数位置的左下方开始填充数字。
如果遇到边界,则继续填充到相应的对角边界处。
例如,当填充n=3的幻方时,从8的左下方(即第三行第二列的位置)开始填充,然后填充到最后一行的左边界,继续填充到最后一个位置(即第一行第三列的位置)。
4. 规则4:填充其他位置从填充右上角和左下角的位置开始,按照以下规则填充其他位置:- 如果下一个填充位置在方阵的边界之外,则将其转移到相应的对角边界处。
- 如果下一个填充位置已经被填充过了,则将其转移到当前填充位置的下方一个位置。
5. 规则5:确定重复位置最后一个规则是确定重复位置。
当下一个填充位置部分或完全重叠时,我们需要将其转移到当前填充位置的下方一个位置。
使用以上的规则和技巧,我们可以逐步填充奇数阶幻方的所有位置,直到所有的位置都被填满。
这样,我们就可以得到一个满足条件的奇数阶幻方。
总结:- 确定中间数的位置,并将其放置在中间行的中间列。
- 从中间数位置的右上方开始填充数字,遇到边界则继续填充到相应的对角边界处。
罗伯法(Rob's Method)是一种解决幻方问题的方法,主要用于填充奇数阶的幻方。
这种方法是基于一种叫做阶梯法(Ladder method)的技巧,并且通过口诀的形式便于记忆和应用。
以下是罗伯法口诀的解释:
1. 一居上行正中央:在首行最中间的格子中填入数字1。
2. 依次斜填切莫忘:向右上角斜行,依次填入连续的数字,即按照顺序从2 填到N^2 (N 是幻方的阶数),并保持斜线的方向不变。
3. 上出框界往下写:如果数字要填写的位置超出了幻方的上边界,那么就将这个数字放在下一行对应的位置。
4. 右出框时左边放:如果数字要填写的位置超出了幻方的右边界,那么就将这个数字放在同一列的前一个位置。
5. 排重便在下格填:如果所要填写的数字已经在该斜线上出现过,那么就在下一个空格继续尝试填写。
6. 右上出框往下降:当同时超出上边界的格子和右边界的格子时,需要把数字放置在下一格,同时遵循“上出框界往下写”和“右出框时左边放”的原则。
7. 出角重复一个样:如果在填写过程中遇到了某个数字已经出现在了它应该所在的对角线上,那么只需像遇到重复数字一样处理,在下个空格继续尝试填写。
按照这些规则,可以构建出任意奇数阶的幻方。
这种方法简单易记,适合初学者掌握。
“幻方”的口诀“幻方”的口诀小学时,老师或者数学竞赛时经常会出现魔方的题目,记得金庸先生写的著名的武侠小说《射雕英雄传》里面的瑛姑就是被一个三阶的幻方给困住了十几年,而黄蓉不到一分钟就完成那个幻方,那么有没有什么诀窍呢?后来,在一些书上看到,对于奇数阶的幻方,有如下的口诀:一居首列正中央,依次斜填左上方;左出框时向右写,上出框时往下放;遇到重合无处填,退居原数右邻行。
举例(3阶幻方):注:*表示还没有填数字的空位置步骤(1):即“一居首列正中央”* * ** * *步骤(2):即“依次斜填左上方,左出框时向右写(上一行最右列)”* * 21 * ** * *步骤(3):即“上出框时往下放(左一列最下一行)”* * 21 * ** 3 *步骤(4):即“遇到重合无处填”,(也就是左上方已经写有数字),“退居原数右邻行”,(将要填写的数字放到本行靠右一列)* * 21 * *步骤(5):* * 21 5 ** 3 4步骤(6):6 * 21 5 ** 3 4步骤(7):注意:左上角位置的左上方位置是右下角,即6的左上方是已经填写了数据的4的位置,根据口诀“遇到重合无处填”,此时6 7 21 5 ** 3 4步骤(8):即“上出框时往下放(左一列最下一行)”6 7 21 5 *8 3 4步骤(9):即“依次斜填左上方,左出框时向右写(上一行最右列)”6 7 21 5 98 3 4只要是奇数阶魔方,都可根据此“口诀”构造。
------------------------------------------双偶阶幻方n为偶数,且能被4整除(n=4,8,12,16,20……) (n=4k,k=1,2,3,4,5……) 先说明一个定义:互补:如果两个数字的和,等于幻方最大数和最小数的和,即n*n+1,称为互补。
先看看4阶幻方的填法:将数字从左到右、从上到下按顺序填写:1 2 3 45 6 7 89 10 11 1213 14 15 16这个方阵的对角线,已经用蓝色标出。
任意奇数阶幻方的N字马步法范贤荣2016.3.12任意奇数阶幻方也可以用马步法(horse)来完成。
马步法如下图马步可以是上跳,也可以下跳。
具体步骤是:向下跳:在第一行居中的方格内放1,向下走2步,再左或右走1步方式的马步(如图)依次填入2、3、4……若出格到方阵下方,把该数字填到该列上方相应的格,如3阶中的6出格,就回到上方。
若出到方阵右方,把该数字填到该行的左方相应的格;出格在右,就返到左方。
如果落步格已有数字,则向下休息一格(不跳马步。
所以,我称之为歇步。
理论上叫“转向步”。
),即下跳下休息。
之后,再继续跳马步。
右下跳左下跳向上跳:与向下跳步伐相同,只是方向相反。
起点在下。
上跳上休息。
右上跳左上跳注1:图中虚线格为框外格。
浅色字为出格的字。
保留这些,以示填写过程。
关于“落步格已有数字,则向下休息一格”,可以不要等到“落步格已有数字”出现时,再如此操作。
我们开始就可以在空方阵上,事先作好标记。
因为,凡是“倍阶”的地方,例如3阶的3、6;5阶的5、10、15、20,都是“休息”的地方。
它们的出现很有规律,见图即知,恕不赘述。
在演习左下跳和右上跳时,这个标记,出现了“N”字。
因此,我把“N字马步法”作为本文的标题。
马步法的口诀:向下跳:1居首行正中央,向下跳出马步样,遇到倍阶下一格,休息片刻再前闯。
向上跳:1居末行正中央,向上跳出马步样,遇到倍阶上一格,休息片刻再前闯。
以下展示的是下跳的3~9阶幻方。
左下跳右下跳以下展示的是上跳的3~9阶幻方。
右上跳左上跳以下还有11~17的各奇数阶幻方:。
方程法求奇数幻方,绝了
其实,并不能完全说是方程法,因为这是由数学归纳法,行列式等方法推算出的。
只是摘结果来感受它的美。
不过,这个方法也是从里层向外扩张构造,当然,如果能写出一张对应各层的表格,则可以一次性写好奇数幻方。
下面来看看基本的概念先。
原基:就是把正常的n幻方减去一个数(n+1)/2得出的一个新幻方。
具有最明显的特性是幻和为0。
3阶幻方各数减去5后得到一个3阶幻方原基。
经过一系列推算得到一个可以计算第m层幻方原基的方程表达的结果:
其实可以注意到,幻方的第m层的四个角的数为:
利用这个方程表达就可以算出奇数幻方的任何一层,所以就达到很好的构造幻方的效果。
例如下面:
部分技术幻方原基
对于这个表我们可以构造出3、5、7、9、11阶幻方,只需对应加上5、13、25、41、61【其实就是加回构造原基是减去的(n+1)/2】即可以。
例如我们想构造一个五阶幻方,只需取上图中间的五阶幻方,然后每个数都加上25。
还有一点,这样构造出来的幻方里面也有很多子幻方!
摘自:童真白马的博客分类——幻方世界
》》欢迎光临《《。
任意奇数阶幻方最简单公式做法
任意奇数阶幻方最简单公式做法
奇数阶幻方的填法我有最简易公式,任意奇数阶直接填成(3阶——任意奇数阶通用),先填中心九宫图,然后延伸填成米字形。
在米字划分的八个区内,对称填(1——最大数),(2——最大数减1),(3——最大数减2),(4——最大数减3)。
这八个数为首数,然后按照走向每格依次递加4,或者递减4,依次填完即成!公式简单而且完美对称,绝对最简单!不用位移法,一次填成!任意奇数阶通用。
公式中带入n(即幻方阶数)即可,内九宫格内每格一个公式,正中心数填上(n 平方+1)除以2,.然后以(中心数)(注:以下简称(中))为坐标和原始数;得出周围八个格内数,如下:
中上左为(中)减1. 中下右为(中)加1.
中上为(中)减(n-1). 中下为(中)加(n-1).
中上右为(中)加(2n-3). 中下左为(中)减(2n-3).
中左为(中)加(n+1). 中右为(中)减(n+1).
然后以这八个数为首数,向外延伸成米字形,填法如下:
中上左方向每格递减2. 中下右方向每格递加2.
中上方向每格递加2. 中下方向每格递减2.
中上右方向每格递减2. 中下左方向每格递加2.
中左方向每格递加2. 中右方向每格递减2.
下面填米字隔开的八个区域:
将(1 )填入右上顶角的下一格,(以它为首数每格递加4)从上往左下依次填完一行,再折回从上往左下依次填完第二行,以此类
推,填完本区。
将(n的平方)填入右下顶角的上一格,(以它为首数每格递减4)从下往左上依次填完一行,再折回从下往左上依次填完第二行,以此类推,填完本区。
将(2 )填入右下顶角的左一格,(以它为首数每格递加4)从下往左上依次填完一行,再折回从下往左上依次填完第二行,以此类推,填完本区。
将(n的平方-1)填入左下顶角的右一格,(以它为首数每格递减4)从下往右上依次填完一行,再折回从下往右上依次填完第二行,以此类推,填完本区。
将(3 )填入左下顶角的上一格,(以它为首数每格递加4)从下往右上依次填完一行,再折回从下往右上依次填完第二行,以此类推,填完本区。
将(n的平方-2)填入左上顶角的下一格,(以它为首数每格递减4)从上往右下依次填完一行,再折回从上往右下依次填完第二行,以此类推,填完本区。
将(4 )填入左上顶角的右一格,(以它为首数每格递加4)从上往右下依次填完一行,再折回从上往右下依次填完第二行,以此类推,填完本区。
将(n的平方-3)填入右上顶角的左一格,(以它为首数每格递减4)从上往左下依次填完一行,再折回从上往左下依次填完第二行,以此类推,填完本区。
至此,幻方填写成功,每行每列还有两条对角线的幻和完全相等,幻和等于(n的平方+1)除以2然后乘以n 注:n=幻方阶数
我在数学北大论坛和幻方北大论坛公布后并无引起异议,故向贵吧投稿,望审核评论,冒昧的说一句这个公式应为国内外幻方领域内迄今为止,乃至今后幻方界最简单最完美的填图法,因为它无法再简化了!我绘制的此方法原理图充分体现了数学的朴素之美!同时此方
法的得出阐明了一个道理,即数学的规律可以有小及大,我们不必研究很大的数字,数论在不太大的数字范围内已经能够显现它的规律了。
古代数学家杨辉给出的幻方位移法很复杂,而且领导了后来幻方做法的方向,他本人也只做到了十阶。
现在的计算机编程做法可以做得很大,但无规律可循。
我认为在数学的基础研究方面,人类的联想和逻辑分析能力,是计算机永远无法企及的!
宇宙=数学奥秘。