1 条题解

  • 0
    @ 2026-4-5 15:21:25
    // 包含C++所有常用头文件(方便刷题/快速编写)
    #include<bits/stdc++.h>
    using namespace std;
    
    // 存储扫雷地图的字符数组(*表示地雷,.表示空地)
    char a[105][105];
    // 标记数组:1代表该位置是地雷,0代表不是地雷
    int b[105][105];
    
    int main(){
        // n:扫雷地图的行数,m:列数
        int m,n;
        // 输入行数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]=='*'){    // 如果这个格子是地雷
                    b[i][j]=1;       // 标记为1(是地雷)
                }
            }
        }
    
        // 第二步:输出最终的扫雷结果
        for(int i = 1;i<=n;i++){
            for(int j = 1;j<=m;j++){
                if(b[i][j]==1){      // 如果当前格子是地雷
                    cout <<"*";      // 直接输出 *
                }else{               // 如果不是地雷
                    // 计算当前格子 周围8个方向 的地雷总数
                    int ans=
                    b[i-1][j]  +    // 正上方
                    b[i-1][j-1]+    // 左上
                    b[i-1][j+1]+    // 右上
                    b[i][j-1]  +    // 正左
                    b[i][j+1]  +    // 正右
                    b[i+1][j]  +    // 正下方
                    b[i+1][j+1]+    // 右下
                    b[i+1][j-1];    // 左下
    
                    cout <<ans;     // 输出周围地雷数量
                }
            }
            cout <<endl; // 一行输出完,换行
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    1942
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    24
    已通过
    5
    上传者