輸入一個6*6
數字的陣列A,每個數字間都有用一個空格隔開,A可以拆解成16個沙漏(hourglass)子集合,由7個數字組合,如下:
a b c
d
e f g
輸出16個沙漏中7個數字總和最大值。
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
19
其中最大值(19)為下列沙漏:
2 4 4
2
1 2 4
arr = []
for _ in range(6): #歷遍6次(因共6行)
arr.append(list(map(int, input().split()))) #將陣列儲存到arr
#將每行以空格隔開的數字轉換為整數,因為map返回迭代器,須再轉為列表
#以樣本為例,此時arr = [[1, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0], [0, 0, 2, 4, 4, 0], [0, 0, 0, 2, 0, 0], [0, 0, 1, 2, 4, 0]]
a = []
for i in range(0,4): #歷遍arr第0-4個元素
for j in range(0,4): #歷遍arr第0-4個元素的第0-4個數字
b = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
a += [b] #將每個沙漏的總和儲存到a,共16個
print(max(a)) #印出沙漏總和的最大值
輸入:
0 9 4 5 6 4
4 5 6 8 7 2
1 0 4 6 2 7
6 5 4 2 1 0
6 8 9 5 3 3
3 5 6 8 4 2
輸出:39
我很好奇一件事,這是你自己想的?還是去找答案的?
...謝謝邦友關心,小女子只是記錄自己解題過程,若有參考別人作法、文章或是請教別人問題,也會一併記錄,希望有解答到你的問題
好一個 希望有解答到你的問題.
新手完全看不懂>"<
可以麻煩您詳解這段麼
for i in range(0,4): #歷遍arr第0-4個元素
for j in range(0,4): #歷遍arr第0-4個元素的第0-4個數字
b = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
a += [b] #將每個沙漏的總和儲存到a,共16個
以例子而言
[[1, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0], [1, 1, 1, 0, 0, 0], [0, 0, 2, 4, 4, 0], [0, 0, 0, 2, 0, 0], [0, 0, 1, 2, 4, 0]]
b=arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2]
是為了達成這樣的結果?
1 1 1 1 1 0 1 0 0 0 0 0
1 0 0 0
1 1 1 1 1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0
1 1 0 0
0 0 2 0 2 4 2 4 4 4 4 0
1 1 1 1 1 0 1 0 0 0 0 0
0 2 4 4
0 0 0 0 0 2 0 2 0 2 0 0
0 0 2 0 2 4 2 4 4 4 4 0
0 0 2 0
0 0 1 0 1 2 1 2 4 2 4 0
還是純粹每個行加總得最大