一、题目描述
二、代码
#include <iostream>
using namespace std;
int main(){
int n, m;
cin >> n >> m;
string str[n];
for(int i = 0; i < n; i ++){
cin >> str[i];
}
char a[n][m];
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j++){
a[i][j] = str[i][j];
}
}
int result[n][m];
for(int i=0; i<n; i++){
for(int j = 0; j < m; j++){
result[i][j]=0;
}
}
for(int i = 0; i < n; i ++){
for(int j = 0; j < m; j++){
if(a[i][j]=='?'){
if(i-1>=0 && a[i-1][j]=='*'){//上
result[i][j]+=1;
}
if(i+1<n && a[i+1][j]=='*'){//下
result[i][j]+=1;
}
if(j-1>=0 && a[i][j-1]=='*'){//左
result[i][j]+=1;
}
if(j+1<m && a[i][j+1]=='*'){//右
result[i][j]+=1;
}
if(i-1>=0 && j-1>=0 && a[i-1][j-1]=='*'){//左上
result[i][j]+=1;
}
if(i-1>=0 && j+1<m && a[i-1][j+1]=='*'){//右上
result[i][j]+=1;
}
if(i+1<n && j-1>=0 && a[i+1][j-1]=='*'){//左下
result[i][j]+=1;
}
if(i+1<n && j+1<m && a[i+1][j+1]=='*'){//右下
result[i][j]+=1;
}
}
}
}
for(int i=0; i<n; i++){
for(int j = 0; j < m; j++){
if(a[i][j]=='*'){
cout<< "*";
}
else
cout << result[i][j];
}
cout << endl;
}
}
三、主要思路
分为上、下、左、右、左上、右上、左下、右下这8个方向分别考虑,在我看来其实这里主要考察的是分支而不是其他。
四、注意点
1、字符串数组
2、分支if