扫个雷

扫雷

https://ac.nowcoder.com/acm/problem/52069

#include <iostream>

using namespace std;
const int dir[8][2] = {{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}}; // cst指不变常量 这步是一个大伏笔啊!

int main (){
    int n , m;
    cin >> n >> m;
    char A[1010][1010]; // 对于这个矩阵 依旧多空出来 10个位置保险
    for(int i = 1; i <= n ;i++){ // 这里从1开始de原因是 要对*旁边八个地方进行加一 但是*可能在第一行或者第一列啊
        for(int j = 1 ; j <= m; j++){
            cin >> A[i][j];
        }
    }
    for(int i = 1; i <=n; i++){
        for(int j = 1; j <= m; j++){
            if(A[i][j] == '*') {
                cout << A[i][j];
                continue;//不加这个的话 岂不是*的地方也要参与运算了? 不符合题意啊
            }
            int cnt = 0 ;
            for(int p = 0; p < 8; p++){
                if(A[i+dir[p][0]][j+ dir[p][1]] ==  '*') cnt++;//细节了老弟 这波用dir省了多少事!
            }
            A[i][j] = cnt +'0';
            cout << A[i][j] ;
        }
        cout << endl;
    }
    return 0;
}
全部评论

相关推荐

09-12 11:55
已编辑
湖南工商大学 Java
那一天的Java_J...:这种一堆问题的,别去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务