用模拟的思路做的,在加数据的过程中没有判断是否越界,但我觉得最后输出的时候的范围是确定的,前边就算加的时候越界了,也不会影响输出,但是测试的时候会出问题,好奇怪,问题在哪捏
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int n = 0, m = 0;
char land [100][100] = { 0 };
memset(land, 0, sizeof(land));
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> land[i][j];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (land[i][j] == '*')//如果是地雷,就在附近八个格子都加一
{
land[i + 1][j + 1]++;
land[i + 1][j - 1]++;
land[i + 1][j]++;
land[i][j + 1]++;
land[i][j - 1]++;
land[i - 1][j]++;
land[i - 1][j + 1]++;
land[i - 1][j - 1]++;
}
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (land[i][j] == '*')
cout << land[i][j];
else
cout << int(land[i][j]-'?');
}
cout << endl;
}
}
测试用例
10 10
?**?*?????
?**?*?**?*
**?**??***
*???***?*?
****?????*
*???****?*
????**?***
**?**?*?*?
**??***?**
?*??*?*??*
2**4*32221
4**6*4**5*
**4**65***
*655***4*4
****56544*
*434****6*
3324**6***
**3**7*6*5
**44***5**
3*22*5*33*