题目描述
小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵,他希望你帮他生成一个扫雷矩阵。
扫雷矩阵的每一行每一列都是一个数字,每个数字的含义是与当前位置相邻的8个方向中,有多少个雷(在下图中,雷用表示);如果当前位置就是雷的话,仍输出一个。
输入样例
....
..**
*.*.
.*.*
输出样例
0122
13**
*4*4
2*3*
C++ 代码
/*注意整数除整数仍是整数,要变成小数需要加上小数点,气死了QAQ*/
#include <iostream>
using namespace std;
char s[1010][1010];
int dx[8] = {1,1,1,-1,-1,-1,0,0},dy[8] = {0,1,-1,0,1,-1,1,-1};
int main()
{
int n,m;
cin >> n >> m;
for(int i = 0;i < n;i ++) cin >> s[i];
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < m;j ++)
{
int cnt = 0;
if(s[i][j] == '*') cout << '*';
else
{
for(int k = 0;k < 8;k ++)
{
int x = dx[k] + i,y = dy[k] + j;
if(x >= n || y >= m || x < 0 || y < 0) continue;//加这个语句防止数组越界
//如果不这样的数组从1开始输入
if(s[x][y] == '*') cnt ++;
}
cout << cnt ;
}
}
cout << endl;
}
}