iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
SideProject30

UVA題型研究系列 第 18

DAY18:Symmetric Matrix

  • 分享至 

  • xImage
  •  

內容
現在給你一個正方形矩陣M。
M矩陣的元素為Mij:{0 < i < n,0 < j < n}。
在這個問題中,您必須找出給定的矩陣是否對稱(symmetric)。

定義:對稱矩陣所有元素都是非負的並且相對於該矩陣的中心對稱。
任何其他矩陣都被認為是非對稱的。

你要做的就是判斷這個矩陣是否對稱。
矩陣內的元素範圍為-2^32 <= Mij <= 2^32 且 0 < n <= 100。

輸入說明
輸入的第一行包含一個數字T (T <= 300),代表測資的數量。
每組測試資料的第一行包含兩個字元一個整數n,n代表這個正方矩陣的維度。
接下來的n行即為這個矩陣內的元素數值。
每一列i有n個數字,第i列的第j個數字即是Mij。

輸出說明
對每一筆測試資料輸出一行"Test #t: S",t為第幾筆測試資料的編號,S為答案字串。
如果輸入的矩陣是對稱矩陣,S = "Symmetric"。
如果輸入的矩陣不是對稱矩陣,S = "Non-symmetric"。

範例輸入 #1
2
N = 3
5 1 3
2 0 2
3 1 5
N = 3
5 1 3
2 0 2
0 1 5
範例輸出 #1
Test #1: Symmetric.
Test #2: Non-symmetric.
題意:檢查題目所給之矩陣是否對稱 (為非負,且相對於中心點對稱)
解題:檢查題目所給之矩陣是否對稱

# 讀取測試案例的數量 T
T = int(input())

# 迭代每個測試案例
for Case in range(T):
    # 讀取矩陣的維度 n
    n = int(input().split(" = ")[1])

    # 初始化一個空的矩陣 M
    M = list()

    # 讀取矩陣的元素並將其存入 M 中
    for i in range(n):
        M.append(list(map(int, input().split())))

    # 判斷矩陣是否對稱,初始化 is_Symmetric 為 True
    is_Symmetric = True

    # 計算矩陣的中心索引
    center = n // 2

    # 遍歷矩陣的上半部分
    for i in range(n):
        for j in range(i + 1):
            # 檢查對稱位置的元素是否小於 0,如果是,矩陣不對稱
            if M[i][j] < 0 or M[n - 1 - i][n - 1 - j] < 0:
                is_Symmetric = False
                break
            # 檢查對稱位置的元素是否相等,如果不相等,矩陣不對稱
            if M[i][j] != M[n - 1 - i][n - 1 - j]:
                is_Symmetric = False
                break
        # 如果矩陣不對稱,跳出迴圈
        if is_Symmetric is False:
            break

    # 輸出測試案例的結果
    if is_Symmetric:
        print(f"Test #{Case + 1}: Symmetric.")
    else:
        print(f"Test #{Case + 1}: Non-symmetric.")

上一篇
DAY17:Guess the score
下一篇
DAY19:Square Numbers
系列文
UVA題型研究30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言