題目敘述
每筆測資第一行有一個正整數T,接下來會有T筆資料。每筆資料第一行有一個字串 (N = ?) 代表下面二維陣列的長寬,接下來會有N行代表二維陣列中的資料。要求輸出這個二維陣列是否為對稱矩陣。
對稱矩陣的定義為:
1. 所有元素都大於0
2. 相對於該矩陣的中心對稱
範例輸入 #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.
解題思路
本題需使用Long Long Int來存矩陣中的資料,收資料的時候如果有收到小於0的數字,可以預設一個布林值,之後就不用進行判斷。可以將矩陣中的資料收成一維陣列,然後判斷這個一維陣列是否是迴文,這樣就可以判斷這個矩陣是否是對稱的。
解題程式碼如下 (僅供參考):
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i<N; i++)
{
char a, b;
int M;
cin >> a >> b >> M;
vector<long long int>num;
bool negative = false;
for (int j = 0; j<M; j++)
{
for (int k = 0; k<M; k++)
{
long long int tmp;
cin >> tmp;
num.push_back(tmp);
if (tmp < 0) negative = true;
}
}
if (!negative)
{
vector<long long int>tmp = num;
reverse(tmp.begin(), tmp.end());
if (tmp == num) cout << "Test #" << i+1 << ": Symmetric.\n";
else cout << "Test #" << i+1 << ": Non-symmetric.\n";
}
else cout << "Test #" << i+1 << ": Non-symmetric.\n";
}
}
留言
張貼留言