#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
vector<vector<char>>a(n+2,vector<char>(m+2));
for(int i=0;i<n+2;i++){
if(i==0){
for(int j=0;j<m+2;j++){
a[0][j]='0';
}
}else if(i==n+1){
for(int j=0;j<m+2;j++){
a[n+1][j]='0';
}
}
else{
a[i][0]='0';
for(int j=1;j<m+1;j++){
cin>>a[i][j];
}
a[i][m+1]='0';
}
}
for(int i=1;i<n+1;i++){
for(int j=1;j<m+1;j++){
if(a[i][j]=='*'){
cout<<'*';
}else{
int x=0;
if(a[i-1][j-1]=='*')x++;
if(a[i-1][j]=='*')x++;
if(a[i-1][j+1]=='*')x++;
if(a[i][j-1]=='*')x++;
if(a[i][j+1]=='*')x++;
if(a[i+1][j-1]=='*')x++;
if(a[i+1][j]=='*')x++;
if(a[i+1][j+1]=='*')x++;
cout<<x;
}
}
cout<<endl;
}
return 0;
}
本题难点在于边界处理上稍有不慎就会死循环,我将原数组的四周定义为‘0’字符再循环判断每一个位置即可

京公网安备 11010502036488号