矩陣翻轉(上下,左右)


輸入格式

輸入第一行包括由空格分開的整數 M,N,T(0 < N,M < 200)M,N,T(0<N,M<200),T 的值為 0 或11。其中 M 和 N 分別表示待處理矩陣的行數與列數,T 為 0 時表示左右翻轉,為 1 時表示上下翻轉。

之后的 M 行,每行包括由空格分隔的 N 個整數,依次為輸入矩陣的每一行的數據。

輸出格式

輸出包括 M 行 N 列,每個數字之間用一個空格分隔,每一行行末均有一個空格,表示的是按照要求翻轉后的矩陣。

樣例輸入

4 4 1
1 2 3 4
5 6 7 8
9 0 1 2
3 4 5 6

樣例輸出

3 4 5 6 
9 0 1 2 
5 6 7 8 
1 2 3 4 

解題思路:這道題上下翻轉和左右翻轉分為兩種不太相同的思路
1.首先將輸入的數組存入一個二維列表中,python中不存在二維列表,即用列表中包含列表來表示二維列表
mapss = []
for i in range(int(a)):
    lists = input().split()
    mapss.append(lists)
 
         

2.對這個列表進行上下翻轉,按照以上存入數組方法,每一行就是一個列表,直接將列表進行交換

        for j in range(m // 2):

            maps[j], maps[a - 1 - j] = maps[a - 1 - j], maps[j]

3.對這個列表左右翻轉,由於一開始存入的數組是上圖所示,所以無法直接進行數組交換,只能將每行中的數字逐個交換

        for j in maps:
            for k in range(n // 2):
                j[k], j[n-1-k] = j[n-1-k], j[k]

 

4.將最終的兩種不同方式封裝為函數

def changes(m, n, q, maps):
    if q == 1:
        for j in range(m // 2):

            maps[j], maps[a - 1 - j] = maps[a - 1 - j], maps[j]
    elif q == 0:
        for j in maps:
            for k in range(n // 2):
                j[k], j[n-1-k] = j[n-1-k], j[k]

 

 

貼上最終的ac代碼:

 1 def changes(m, n, q, maps):
 2     if q == 1:
 3         for j in range(m // 2):
 4 
 5             maps[j], maps[a - 1 - j] = maps[a - 1 - j], maps[j]
 6     elif q == 0:
 7         for j in maps:
 8             for k in range(n // 2):
 9                 j[k], j[n-1-k] = j[n-1-k], j[k]
10 
11 
12 a, b, c = input().split()
13 a = int(a)
14 mapss = []
15 for i in range(int(a)):
16     lists = input().split()
17     mapss.append(lists)
18 
19 changes(a, int(b), int(c), mapss)
20 for i in mapss:
21     for j in i:
22         print(j+" ", end="")
23     print("")
View Code

  本題的思路中只將行數,列數以及判斷翻轉方式3個變量化為整數,其余矩陣中的整數均以字符串形式表示,並未將其化為整數,

該題是對矩陣整體的變化,並未對矩陣具體內容進行修改,所以無須化為整數。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM