You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.1 KiB

2 years ago
## 完美方阵
小明很喜欢矩阵,在他的心目中这样的矩阵能够被称为“完美方阵”:这个方阵的 $n$ 行与 $n$ 列当中,每行的数字之和必须相同,每列的数字之和也必须相同。
现在你找来一些方阵,你想知道小明是否愿称之为完美方阵。
**输入格式**
第一行输入一个数 $n$ ,表示一个方阵的行列数;
之后 $n$ 行,每行 $n$ 个数,表示方阵中的每个元素 ,以空格隔开;
**输出格式**
若这个方阵是完美方阵,输出“$YES$”,否则输出“$NO$”。
**输入样例**
```cpp {.line-numbers}
3
3 4 8
7 2 6
5 9 1
```
**输出样例**
```cpp {.line-numbers}
YES
```
#### 原始AC版本
```cpp {.line-numbers}
#include <iostream>
using namespace std;
const int N = 110;
int a[N][N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
//首行累加和
int s = 0;
for (int i = 1; i <= n; i++) s += a[1][i];
//所有行进行判断
for (int i = 1; i <= n; i++) {
int t = 0;
for (int j = 1; j <= n; j++) t += a[i][j];
if (t != s) {
puts("NO");
return 0;
}
}
// 所有列进行判断
for (int j = 1; j <= n; j++) {
int t = 0;
for (int i = 1; i <= n; i++) t += a[i][j];
if (t != s) {
puts("NO");
return 0;
}
}
puts("YES");
return 0;
}
```
#### 优化后版本
```cpp {.line-numbers}
#include <iostream>
using namespace std;
const int N = 110;
int a[N], b[N];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
int x;
cin >> x;
a[j] += x;
b[i] += x;
}
for (int i = 1; i <= n; i++)
if (a[i] != a[1] || b[i] != a[1]) {
puts("NO");
return 0;
}
puts("YES");
return 0;
}
```