Advertisement

上海计算机学会2020年5月月赛C++丙组T3扫雷

阅读量:

扫雷

内存限制: 256 Mb时间限制: 1000 ms

题目描述

小爱正在开发一个扫雷游戏的题目生成器。这张地图标注了每个地雷的位置,并使用符号 * 标记地雷的位置和符号 . 标记空白区域。该模块生成的结果是以表格形式呈现的,在每一格中记录了相邻八个方格内所存在的地雷数量。

例如,给定一个初始地图:

复制代码
 *.*

    
 ...
    
 *..

则应输出:

复制代码
 *2*

    
 231
    
 *10

请你帮助小爱来完成这个程序。

输入格式

第一行:两个整数 n 和 m;
接下来有 n×m 个字符,表示每个方格是否存在地雷。

输出格式

共有n×m个字符用于记录每个方格周围的地雷数量信息。如果该位置原本存在地雷,则输出一个星号 *

数据范围

1≤n,m≤100

样例数据

输入:
3 4
..
..
..
输出:
33
3
3
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)

还没有任何评论哟~