#include <iostream> using namespace std; int main(){ int n,m; cin>>n>>m; int picture[n][m] = {0}; for(int i = 0; i < n;i++){ for(int j = 0;j < m;j++){ cin>>picture[i][j]; } } int p[n][m] = {0}; for(int i = 0; i < n;i++){ for(int j = 0;j < m;j++){ p[i][j] = picture[i][j]; } } for(int i = 0; i < n;i++){ for(int j = 0;j < m;j++){ if(i!=0&&i!=n-1&&j!=0&&j!=m-1){ picture[i][j] = p[i+1][j]+p[i-1][j]+p[i][j+1]+p[i][j-1]+p[i][j]; picture[i][j]/=5; } } } for(int i = 0; i < n;i++){ for(int j = 0;j < m;j++){ cout <<picture[i][j]<<" "; } cout<<endl; } return 0; }
时间: 2024-03-24 12:38:42 浏览: 26
这段代码存在的问题已经在之前的回答中指出并给出了正确代码,这段代码与之前的代码没有任何不同,因此仍然存在两个问题:
1. 在定义 picture 和 p 时,使用了变量 n 和 m,但这两个变量的值是不确定的,应该使用常量或者动态分配内存来定义数组。
2. 在进行数组元素平均值计算时,应该将结果使用四舍五入的方式取整。
改正后的代码与之前的代码相同,如下所示:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int MAXN = 1005;
int main(){
int n,m;
cin>>n>>m;
int picture[MAXN][MAXN] = {0};
for(int i = 0; i < n;i++){
for(int j = 0;j < m;j++){
cin>>picture[i][j];
}
}
int p[MAXN][MAXN] = {0};
for(int i = 0; i < n;i++){
for(int j = 0;j < m;j++){
p[i][j] = picture[i][j];
}
}
for(int i = 0; i < n;i++){
for(int j = 0;j < m;j++){
if(i!=0&&i!=n-1&&j!=0&&j!=m-1){
picture[i][j] = p[i+1][j]+p[i-1][j]+p[i][j+1]+p[i][j-1]+p[i][j];
picture[i][j] = round(picture[i][j]/5.0);
}
}
}
for(int i = 0; i < n;i++){
for(int j = 0;j < m;j++){
cout <<picture[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
```