判断一个 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;
}