这个题逻辑思维其实不难,就是把不靠在边上的数与它上下左右所有的数求和/5,替换掉原来的那个数,边上一圈数不变,但是如果只用一个数组的话,会导致一边运算一边输出,就比如原来在(3,3)位置的数是100,但是经过计算后变成了80,在计算他周围的数的时候,会用80来计算,但是题目要求我们还是按原来的100来计算,所以说不能单纯只用一个数组,要用两个数组来解决。
下面是代码部分
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[101][101],b[101][101];
int m,n;
int i,j;
cin>>m>>n;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(i==1||i==m||j==1||j==n)
b[i][j]=a[i][j];//把边上的数原封不动的存到b里面相应的位置。
else b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j]+a[i][j-1]+a[i][j+1])/5.0);
//这里要/5.0,因为要取整,如果不是5.0的话,那round(8/3)=round(2),取整了个寂寞。
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
再加一份不用登录直接复制粘贴的:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[101][101],b[101][101];
int m,n;
int i,j;
cin>>m>>n;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(i==1||i==m||j==1||j==n)
b[i][j]=a[i][j];//把边上的数原封不动的存到b里面相应的位置。
else b[i][j]=round((a[i-1][j]+a[i+1][j]+a[i][j]+a[i][j-1]+a[i][j+1])/5.0);
//这里要/5.0,因为要取整,如果不是5.0的话,那round(8/3)=round(2),取整了个寂寞。
}
}
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}