羅伯法
羅伯法
是構造幻方的一種數學方法。幻方是一種廣為流傳的數學遊戲,據說早在大禹治水時就發現過。
幻方的特點是:由自然數構成n×n正方形陣列,稱為n
5階幻方
羅伯法的助記口訣:
(初學者可先畫出一個N×N的方格陣)
1 居上行正中央——數字 1 放在首行最中間的格子中
依次斜填切莫忘——向右上角斜行,依次填入數字
上出框界往下寫——如果右上方向出了上邊界,就以出框后的虛擬方格位置為基準,將數字豎直降落至底行對應的格子中
右出框時左邊放——同上,向右出了邊界,就以出框后的虛擬方格位置為基準,將數字平移至最左列對應的格子中
重複便在下格填——如果數字{N} 右上的格子已被其它數字佔領,就將{N+1} 填寫在{N}下面的格子中
右上重複一個樣——如果朝右上角出界,和“重複”的情況做同樣處理
羅伯法的具體方法如下:
把1(或最小的數)放在第一行正中;
按以下規律排列剩下的n2-1個數:
1)每一個數放在前一個數的右上一格;
2)如果這個數所要放的格已經超出了頂行那麼就把它放在底行,仍然要放在右一列;
3)如果這個數所要放的格已經超出了最右列那麼就把它放在最左列,仍然要放在上一行;
4)如果這個數(例如6)所要放的格已經超出了頂行且超出了最右列那麼就把它放在它的下一行同一列的格內;
5)如果這個數所要放的格已經有數填入,處理方法同4)。
只要是有規律的東西,計算機很容易就可以做到。
下面我們把羅伯法翻譯成計算機演演算法思路:
定義一個n×n數組;
把1放在第0行第n\2列;
設當前格為(i?j),設一步長變數k(k=2->n?n)
1) i減1,j加1;
2) 如果i<0那麼i=n-1;
徠3) 如果j>n-1那麼j=0;
4) 如果2)和3)同時出現那麼就把j減回1,i加上2;
5) 如果a(i?j)不為空那麼按照4)處理;
6) 把k的值賦給當前格a(i?j);
繼續循環;
輸出幻方陣。