1. 程式人生 > 其它 >多維陣列:尋找鞍點

多維陣列:尋找鞍點

技術標籤:python

本人為 python 小白,寫這題的程式碼有兩個原因。一是:我第一次做這道題沒有什麼思路,但百度到的都是 C++ 的解法,所以打算寫一個 python 的程式碼。二是:我打算把思路過程寫下來,這樣我以後也可以更好理解自己當時的想法。
(由於筆者接觸 python 不久,所以寫的程式碼有些冗長而且不知道如何優化,還望閱者諒解。如有錯誤,懇請指正。)

題目描述:

給定一個5*5的矩陣,每行只有一個最大值,每列只有一個最小值,尋找這個矩陣的鞍點。 鞍點指的是矩陣中的一個元素,它是所在行的最大值,並且是所在列的最小值。 例如:在下面的例子中(第4行第1列的元素就是鞍點,值為8 )。

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

輸入格式:

輸入包含一個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 = ' ') # 因為記錄的是索引位置,所以輸出時要加一。