e513: 11349 - Symmetric Matrix

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

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,依序判斷陣列內第一個與最後一個、第二個與倒數第二個…是否相等,直到到達矩陣中央,過程中可順便查看是否有負數。

程式碼

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