C++编写程序实现完美方阵源代码

题目描述

小明很喜欢矩阵,在他的心目中这样的矩阵能够被称为完美方阵:这个方阵的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作为输入,表示方阵中的每个元素。函数内部首先计算每行和每列的数字之和,并将其保存在rowSumcolSum向量中。然后,通过比较每行和每列的数字之和是否相等,判断该方阵是否为完美方阵。

main函数中,首先读取输入的方阵的行列数n,然后创建一个二维向量matrix来保存方阵的元素。接下来,使用嵌套循环读取方阵的每个元素,并将其存储在matrix中。最后,调用isPerfectMatrix函数判断该方阵是否为完美方阵,并根据结果输出”YES”或”NO”。

对于给定的用例输入,输出将为”YES”,符合预期结果。

© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享