上海计算机学会2020年5月月赛C++丙组T3扫雷
发布时间
阅读量:
阅读量
扫雷
内存限制: 256 Mb时间限制: 1000 ms
题目描述
小爱正在开发一个扫雷游戏的题目生成器。这张地图标注了每个地雷的位置,并使用符号 * 标记地雷的位置和符号 . 标记空白区域。该模块生成的结果是以表格形式呈现的,在每一格中记录了相邻八个方格内所存在的地雷数量。
例如,给定一个初始地图:
*.*
...
*..
则应输出:
*2*
231
*10
请你帮助小爱来完成这个程序。
输入格式
第一行:两个整数 n 和 m;
接下来有 n×m 个字符,表示每个方格是否存在地雷。
输出格式
共有n×m个字符用于记录每个方格周围的地雷数量信息。如果该位置原本存在地雷,则输出一个星号 *。
数据范围
1≤n,m≤100
样例数据
输入:
3 4
..
..
..
输出:
33
33
24
解析:详见代码:
#include <bits/stdc++.h>
using namespace std;
char s[105][105];
//定义8个位置的x,y差值
int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
int main() {
int m, n;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> s[i][j];
}
}
//循环所有位置
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s[i][j] == '.') {//如果不是雷
s[i][j] = '0';//雷数设为0
//循环周围8个位置
for (int k = 0; k < 8; k++) {
//是雷就加1
if (s[i + dx[k]][j + dy[k]] == '*') {
s[i][j]++;
}
}
}
}
}
//输出
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cout << s[i][j];
}
cout << endl;
}
return 0;
}
全部评论 (0)
还没有任何评论哟~
