問題描述:給定一個(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()