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; }
|