题目描述
小爱正在编写一个扫雷游戏的模拟器。这个模块的输入是一张地图,标记了每个地雷的位置,地雷以*
表示,空地以.
表示。这个模块的输出是一个表格,统计了每个空地周围八个方格内的地雷数量。
例如,给定一个初始地图:
*.*
...
*..
则应输出:
*2*
231
*10
请你帮助小爱来完成这个程序。
输入描述
第一行:两个整数 $n$ 和 $m$;
接下来有 $n×m$ 个字符,表示每个方格是否存在地雷。
数据范围
1≤n,m≤100
输出描述
共计 $n×m$ 个字符,表示每个方格周围地雷统计信息,若原本这个位置就有地雷,输出*
。
输入样例
3 4
*..*
.**.
.*.*
输出样例
*33*
3**3
2*4*
#include <iostream>
using namespace std;
int main() {
int n, m;
char b[110][110];
cin >> n >> m;
//读入扫雷的地图
for (int i =0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> b[i][j];
//输出nXm个字符
for (int i = 0; i < n; ++i) {
for (int j = 0; j <m; ++j) {
if (b[i][j] == '*')//如果b[i][j]是地雷
cout << '*';
else{//如果b[i][j]是空地:计算该空地的周围的地雷总数
int c =0;
int dx[] = {-1,-1,-1,0, 0, 1, 1, 1};
int dy[] = {-1, 0, 1,-1, 1,-1,0, 1};
for (int k =0; k < 8; ++k) {
int x = i + dx[k];
int y = j + dy[k];
if (0 <= x && x< n && 0 <= y && y<m&& b[x][y]=='*')
++c;
}
cout << c;
}
}
cout<< '\n';
}
return 0;
}