矩陣每行加起來都一樣怎么算?
奇數階矩陣,橫豎斜加起來都相等算法(羅伯法幻?)
奇數階矩陣,橫豎斜加起來都相等:
給定奇數N,形成N階矩陣,使得橫豎斜加起來都相等。?如N=3:
每??,每?列,交叉斜加起來都等于15
算法思路分析過程:
?、暴?解法:循環+遞歸實現全排列組合。此法思路簡單,?上不少代碼實現的,但是缺點也是很明顯的,暴?愚蠢耗資源。
?、排列加上數學分析:
1、∵橫豎斜之和全相等,∴每?每列之和=全數字之和/n。如果n=3,和=(1+2+3+……+9)/3=45/3=15。
2、?∵橫豎斜之和全相等,推測出中?位置(x=n/2,y=n/2)的數字,為1-N^2的中?數字。?如N=3,坐標(1,1)位置的數字最可能是5。
三、羅伯法幻?(正解)
幻?是?種?為流傳的數學游戲,據說早在?禹治?時就發現過。幻?的特點是:由?然數構成n×n正?形陣列,稱為n階幻?,每??、每?列、兩對?線上的數之和相等。法國?羅伯總結出了構造奇數階連續?然數幻?的簡單易?的?法“羅伯法”。下表就是?個?羅伯法排好的5階幻?。
羅伯法的具體?法如下:
把1(或最?的數)放在第??正中;
按以下規律排列剩下的n2-1個數: 1)每?個數放在前?個數的右上?格; 2)如果這個數所要放的格已經超出了頂?那么就把它放在底?,仍然要放在右?列;3)如果這個數所要放的格已經超出了最右列那么就把它放在最左列,仍然要放在上??; 4)如果這個數所要放的格已經超出了頂?且超出了最右列那么就把它放在前?個數的下??同?列的格內; 5)如果這個數所要放的格已經有數填?,處理?法同4)。
只要是有規律的東西,計算機很容易就可以做到。
下?我們把羅伯法翻譯成計算機算法思路: 定義?個n×n數組; 把1放在第0?第n/2列 設當前格為(i,j) 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); 繼續循環;
輸出幻?陣。
羅泊法(牢記?訣)是?上正中央,依次斜填切莫忘;上出框界往下寫,右出框時左邊放;重復便在下格填,出?重復?個樣。
python代碼實現如下:
n = 5
# 建?n階矩陣
matrix = [[0] * n]
for i in range(n - 1):
matrix += [[0] * n]
x, y = 0, n // 2
for i in range(1, n * n + 1):
matrix[x][y] = i
if i % n == 0:
x += 1
elif x == 0:
x = n - 1
y += 1
elif y == n - 1:
x -= 1
y = 0
else:
x -= 1
y += 1
or i in range(n):
for j in range(n):
print('%02d' % matrix[i][j], end=' ')
print('')
四、關于三階幻??上收集到?些有意思的說法:
相傳,?禹治?時,洛?中出現了?個“神龜”背上有美妙的圖案,史稱“洛書”,?現在的數字翻譯出來,就是三階幻?。
南宋數學家楊輝概括其構造?法為:“九?斜排。上下對易,左右相更。四維挺出?!?/p>
《射雕英雄傳》中黃蓉講得很清楚:“?四為肩,六?為?,左七右三,戴九履?,五居中央”
2 9 4
7 5 3
6 1 8
橫豎斜加起來都是15.