非常“简单”的题解
2024-07-23 18:38:17
发布于:浙江
28阅读
0回复
0点赞
先上答案哈
#include <iostream>
using namespace std;
char a [105][105];
int b[105][105];
int x[10] = {-1,-1,-1,0,0,1,1,1};
int y[10] = {-1,0,1,-1,1,-1,0,1};
int main(){
int n , m;
cin >> n >> m;
for(int i = 1 ;i <= n; i++){
for(int j = 1; j<=m;j++){
cin >> a[i][j];
if(a[i][j] == '*'){
for(int k = 0; k <= 7; k++){
b[i + x[k]][j + y[k]]++;
}
}
}
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m ; j++){
if(a[i][j]=='*')cout << "*";
else cout << b[i][j];
}
cout << endl;
}
return 0;
}
【思路分析】:
1、定义字符数组 a 存雷区,整型数组 b 存地雷个数,两个方向数组 x 和 y 存点 (i,j) 周围 8 个方向的坐标。
16035 16035 2、输入雷区,如果 a[i][j] 等于 *,遍历方向数组,将 (i,j) 周围 8 个格子的地 雷个数加 1。
3、最后遍历整个 a 数组,如果 a[i][j] 等于 *,输出 *,否则输出 (i,j) 的地雷 个数。
求赞
全部评论 1
奥利给
2024-07-23 来自 浙江
0
有帮助,赞一个