🎉️ 程序设计 -- 幻方

判断一个 n×n 矩阵是否为幻方。

幻方是指一个矩阵中每行元素之和、每列元素之和及每个对角线上元素之和均相等。

输入格式
输入的第一行是一个整数 n(0<n<20),测试表示矩阵的大小。

随后是一个n×n 的矩阵,总共 n行,每一行 n个数,用空格隔开。

输出格式
如果满足题目要求,输出Yes,否则输出No。

输入样例1
5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
输出样例1
Yes
输入样例2
5
17 26 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
输出样例2
No

#include <stdio.h>

#define N 20

int main()
{
    int a[N][N], s[2 * (N + 1)] = {};
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &a[i][j]);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            s[i] += a[i][j];
            s[i + n] += a[j][i];
        }
        s[2 * n] += a[i][i];
        s[2 * n + 1] += a[i][n - i - 1];
    }
    int all_equal = 1;
    for (int i = 0; i < 2 * n + 1; i++)
    {
        if (s[i] != s[i + 1])
        {
            all_equal = 0;
            break;
        }
    }
    if (all_equal)
        printf("Yes");
    else
        printf("No");
    return 0;
}