题目描述:
输入第一行是用一个空格隔开的两个整数n 和m(1=<n,m<=100),分别表示雷区的行数和列数。接下来 n 行,每行 m 个字符,描述了雷区中的地雷分布情况。字符’#’表示相应格子是地雷格,字符’?’表示相应格子是非地雷格。相邻字符之间无分隔符。
代码分析:
判定四周是否有'*',如果有即做s++,并对'*'部分赋值为-1,最后输出即可。
代码实现:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,k[110][110]={},s=0;
char a[110][110];
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]=='*') k[i][j]=-1;
else{
if(a[i-1][j-1]=='*') s++;
if(a[i-1][j]=='*') s++;
if(a[i-1][j+1]=='*') s++;
if(a[i+1][j-1]=='*') s++;
if(a[i+1][j+1]=='*') s++;
if(a[i+1][j]=='*') s++;
if(a[i][j-1]=='*') s++;
if(a[i][j+1]=='*') s++;
k[i][j]=s;
s=0;
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(k[i][j]==-1) cout<<'*';
else cout<<k[i][j];
}
cout<<endl;
}
return 0;
} </