多維陣列:尋找鞍點
阿新 • • 發佈:2020-12-11
技術標籤:python
本人為 python 小白,寫這題的程式碼有兩個原因。一是:我第一次做這道題沒有什麼思路,但百度到的都是 C++ 的解法,所以打算寫一個 python 的程式碼。二是:我打算把思路過程寫下來,這樣我以後也可以更好理解自己當時的想法。
(由於筆者接觸 python 不久,所以寫的程式碼有些冗長而且不知道如何優化,還望閱者諒解。如有錯誤,懇請指正。)
題目描述:
給定一個5*5的矩陣,每行只有一個最大值,每列只有一個最小值,尋找這個矩陣的鞍點。 鞍點指的是矩陣中的一個元素,它是所在行的最大值,並且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍點,值為8 )。
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
輸入格式:
輸入包含一個5行5列的矩陣
輸出格式:
如果存在鞍點,輸出鞍點所在的行、列及其值,如果不存在,輸出"not found"
輸入樣例:
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
輸出樣例:
4 1 8
簡單的思路分析
這道題的思路比較容易想到,就是找到某一行的最大值,然後判斷這個最大值是否為它所在的列的最小值。
程式碼實現
因為自學的緣故,我總是用 j 表示行,用 i 表示列
grid = []
count = 0
while count < 5:
list1 = []
temp = input().split()
for i in temp:
list1.append(int(i))
grid.append(list1)
count += 1
j_1 = []
i_1 = []
for i in range(len(grid)):
# 找出每一行的最大值以及它在這一行的位置,這個位置就是最大值所在的列的位置。
max_num = (max(grid[i]))
index = grid[i].index( max_num) # 這是列的位置索引
list1 = []
# 找出最大值所在列的最小值並記錄它在那一行
for j in range(len(grid)):
list1.append(grid[j][index])
min_num = min(list1)
index1 = list1.index(max_num) # 這是行的位置索引
# 判斷最大值是否等於最小值,如果相等記錄鞍點的位置
if min_num == max_num:
j_1.append(index1)
i_1.append(index)
if len(i_1) == 0:
print("not found")
else:
for i in range(len(j_1)):
print(j_1[i] + 1, i_1[i] + 1, grid[j_1[i]][i_1[i]], sep = ' ') # 因為記錄的是索引位置,所以輸出時要加一。