CPE 一顆星選集 49 道必考題
題目連結:https://zerojudge.tw/ShowProblem?problemid=e513
內容
給定一個正方形矩陣,判斷是否對稱。
定義:對稱矩陣所有元素都是非負的並且相對於該矩陣的中心對稱。
任何其他矩陣都被認為是非對稱的。
輸入第一列整數 T (T <= 300)代表測資數,第二列為矩陣邊長 n (0 < n <= 100),接著為矩陣(元素範圍為-2^32 <= Mij <= 2^32)。
範例輸入
2
N = 3
5 1 3
2 0 2
3 1 5
N = 3
5 1 3
2 0 2
0 1 5
範例輸出
Test #1: Symmetric.
Test #2: Non-symmetric.
想法
將矩陣以一維陣列方式儲存,長度為 n*n,依序判斷陣列內第一個與最後一個、第二個與倒數第二個…是否相等,直到到達矩陣中央,過程中可順便查看是否有負數。
程式碼
    
    
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr) using namespace std;
  int main(){     fastio;     long long T, n, mp[10001], L, R;     char temp;     bool suc;     cin >> T;     for(int c = 1; c <= T; ++c){         cin >> temp >> temp >> n;         for(int i = 0; i < n*n; ++i) cin >> mp[i];         L = 0, R = n*n - 1, suc = true;         while(L <= R){             if(mp[L] != mp[R]){                 suc = false;                 break;             }             else if(mp[L] < 0 || mp[R] < 0){                 suc = false;                 break;             }             ++L, --R;         }         cout << "Test #" << c << ": ";         if(suc) cout << "Symmetric.\n";         else cout << "Non-symmetric.\n";     }     return 0; }
   |