奇數階幻方的經典方法 羅伯法

2021-06-21 14:16:59 字數 806 閱讀 6066

**於: 所謂

幻方,也教縱橫圖,就是在n×n的方陣中放入1到n

2個自然數:在一定的布局下,其各行、各列和兩條對角線上的數字之和正好都相等。這個和數就叫做「幻方常數」或幻和。

構造幻方的方法:

奇數階幻方,也就是3階、5階、7階……幻方,那麼如何構造這樣的幻方呢? 

我們可以採取羅伯法(也叫連續擺數法),其法則如下: 

把「1」放在中間一列最上邊的方格中,從它開始,按對角線方向(比如說按從左下到右上的方向)順次把由小到大的各數放入各方格中,如果碰到頂,則折向底,如果到達右側,則轉向左側,如果進行中輪到的方格中已有數或到達右上角,則退至前一格的下方。 

按照這一法則建立5階幻方的示例如下圖:

羅伯法(連續擺數法)的助記口訣:

1 居上行正**,依次斜填切莫忘。

上出框界往下寫,右出框時左邊放。

重複便在下格填,角上出格乙個樣。

1 居上行正**——數字 1 放在首行最中間的格仔中

依次斜填切莫忘——向右上角斜行,依次填入數字

上出框界往下寫——如果右上方向出了上邊界,就以出框後的虛擬方格位置為基準,將數字豎直降落至底行對應的格仔中

右出框時左邊放——同上,向右出了邊界,就以出框後的虛擬方格位置為基準,將數字平移至最左列對應的格仔中

重複便在下格填——如果數字{n} 右上的格仔已被其它數字占領,就將{n+1} 填寫在{n}下面的格仔中

角上出格乙個樣——如果朝右上角出界,和「重複」的情況做同樣處理。

奇數階幻方構造法

siamese方法 kraitchik 1942年,pp.148 149 是構造奇數階幻方的一種方法,說明如下 由於幻方的對稱性,也可以把右上改為右下 左上以及左下等方位 實現 include includeusing namespace std int main else if i 0 i n 1...

奇數階矩陣,橫豎斜加起來都相等演算法(羅伯法幻方)

給定奇數n,形成n階矩陣,使得橫豎斜加起來都相等。比如n 3 08 01 06 03 05 07 04 09 02 每一行,每一列,交叉斜加起來都等於15 一 暴力解法 迴圈 遞迴實現全排列組合。此法思路簡單,網上不少 實現的,但是缺點也是很明顯的,暴力愚蠢耗資源。二 排列加上數學分析 1 橫豎斜之...

magic squire幻方的學習 奇數階幻方

今天介紹了關於幻方的一些知識,並布置了一些相關的家庭作業。幻方,我的理解就是一種數獨吧,要求每行每列還有對角邊的和都一樣,填進空格的數字是1 n n是階數,比如三階幻方就是將1到9的數字填進3x3的九宮格裡。所有數字的和可以用求和公式 1 2 n n n 1 2 假設每行每列的和為 s,那麼 3s ...