题目描述
小明很喜欢矩阵,在他的心目中这样的矩阵能够被称为完美方阵:这个方阵的n行与n列当中,每行的数字之和必须相同,每列的数字之和也必须相同。 现在你找来一些方阵,你想知道小明是否愿称之为完美方阵。
输入描述
第一行输入一个数n,表示一个方阵的行列数;之后n行,每行n个数,表示方阵中的每个元素 a[i][j],以空格隔开;
输出描述
若这个方阵是完美方阵,输出“YES”,否则输出“NO”。
用例输入
3
3 4 8
7 2 6
5 9 1
用例输出
YES
源代码
#include <iostream>
#include <vector>
using namespace std;
bool isPerfectMatrix(vector<vector<int>>& matrix) {
int n = matrix.size();
// 计算每行和每列的数字之和
vector<int> rowSum(n, 0);
vector<int> colSum(n, 0);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
rowSum[i] += matrix[i][j];
colSum[j] += matrix[i][j];
}
}
// 判断每行和每列的数字之和是否相等
int sum = rowSum[0]; // 假设第一行的数字之和为标准值
for (int i = 0; i < n; i++) {
if (rowSum[i] != sum || colSum[i] != sum) {
return false;
}
}
return true;
}
int main() {
int n;
cin >> n;
vector<vector<int>> matrix(n, vector<int>(n));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
if (isPerfectMatrix(matrix)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
该代码首先定义了一个isPerfectMatrix
函数,用于判断给定的方阵是否为完美方阵。该函数接受一个二维向量matrix
作为输入,表示方阵中的每个元素。函数内部首先计算每行和每列的数字之和,并将其保存在rowSum
和colSum
向量中。然后,通过比较每行和每列的数字之和是否相等,判断该方阵是否为完美方阵。
在main
函数中,首先读取输入的方阵的行列数n
,然后创建一个二维向量matrix
来保存方阵的元素。接下来,使用嵌套循环读取方阵的每个元素,并将其存储在matrix
中。最后,调用isPerfectMatrix
函数判断该方阵是否为完美方阵,并根据结果输出”YES”或”NO”。
对于给定的用例输入,输出将为”YES”,符合预期结果。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END