橫豎斜總和相等的奇數(shù)矩陣

問題描述:給定一個(gè)奇數(shù)n,將1~n * n填入n * n的矩陣中,數(shù)字不能重復(fù),使得橫豎斜的總和相等。

如當(dāng)n=7時(shí):
30 39 48 01 10 19 28
38 47 07 09 18 27 29
46 06 08 17 26 35 37
05 14 16 25 34 36 45
13 15 24 33 42 44 04
21 23 32 41 43 03 12
22 31 40 49 02 11 20

規(guī)律:從小到大依次放入矩陣中,下一個(gè)數(shù)放在上一個(gè)數(shù)的右上角位置(即:行-1,列+1)。1總是在第一行的中間位置,接著將2放在1的右上角,依次類推。 a.如果右上角的位置的行和列都越界,就將這個(gè)數(shù)放在上個(gè)數(shù)的正下方(即:上個(gè)數(shù)的行+1)。b.如果右上角的位置只有行越界,就將行改到最大,列不變。c.如果右上角的位置只有列越界,就將列改到最小,行不變。d.如果右上角的位置沒有越界,但是已經(jīng)填有數(shù)字,就將這個(gè)數(shù)放在上個(gè)數(shù)的正下方。

  • python代碼
n = int(input("請(qǐng)輸入一個(gè)奇數(shù):"))
m = [[0 for i in range(n)] for i in range(n)] #矩陣
row, col = 0, n // 2
num = 1
while num <= n * n:
    m[row][col] = num
    num += 1
    row -= 1
    col += 1
    if row < 0 and col >= n:
        row, col = row + 2, col - 1#因?yàn)閞ow已經(jīng)減了1,col已經(jīng)加了1
    elif row < 0:
        row = n - 1
    elif col >= n:
        col = 0
    elif m[row][col] != 0:
        row, col = row + 2, col - 1
for i in range(n):
    for j in range(n):
        print('%02d' % m[i][j], end = ' ')
    print()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容