判断一个 n*n 矩阵是否为魔方阵。魔方阵是指一个矩阵中每行元素之和、每列元素之和及每个对角线上元素之和均相等。请将下列代码改为正确的:#include <iostream> using namespace std; int main(){ int n; cin>>n; int ans[n*2+2] = {0}; int arr[n][n]; for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ cin>>arr[i][j]; } } for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ ans[i] = arr[i][j]; } } for(int j = 0;j < n;j++){ for(int i = 0;i < n;i++){ ans[j+n] = arr[i][j]; } } for(int i = 0;i < n;){ for(int j = n;j >= 0;i++,j--){ ans[n] = arr[i][j]; } } for(int i = 0;i < 0;){ for(int j = 0;j < 0;i++,j++){ ans[n+1] = arr[i][j]; } } int ans_; for(int i = 0;i < n*2+2;i++){ ans_ += ans[i]; } if(ans_/(n*2+2) == 0){ cout<<"Yes"; }else{ cout<<"No"; } return 0; }
时间: 2024-01-14 12:02:45 浏览: 73
这段代码中存在几个问题,需要进行修改:
1. 魔方阵的行、列和对角线元素之和应该是相等的,而不是等于0。
2. 在统计每行、每列、对角线元素之和的过程中,需要将当前元素的值累加到对应的和的位置上,而不是覆盖原有的和的值。
3. 在统计对角线元素之和时,需要在第一个for循环中进行累加。
修改后的代码如下:
```
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int arr[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
int ans[n * 2 + 2] = {0};
int ans_ = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ans[i] += arr[i][j]; // 统计每行元素之和
ans[j + n] += arr[i][j]; // 统计每列元素之和
if (i == j) {
ans[n * 2] += arr[i][j]; // 统计主对角线元素之和
}
if (i + j == n - 1) {
ans[n * 2 + 1] += arr[i][j]; // 统计副对角线元素之和
}
}
}
for (int i = 0; i < n * 2 + 2; i++) {
if (ans[i] != ans[0]) { // 判断每行、每列、对角线元素之和是否相等
cout << "No";
return 0;
}
}
cout << "Yes";
return 0;
}
```
这样就可以正确地判断一个 n*n 矩阵是否为魔方阵了。
阅读全文