大飞机呼呼呼


私信TA

用户名:uq_39512331327

访问量:107

签 名:

等  级
排  名 78149
经  验 149
参赛次数 0
文章发表 1
年  龄 20
在职情况 学生
学  校
专  业

  自我简介:

解题思路:本质上其实就是扫雷游戏,摒弃原有多层判断(四角、边缘、内部)。

              换一种思路:既然是计算周围九宫格的雷数,就应该想到只要遍历对应元素周围(行差<=1 && 列差<=1)同时字符=='*'即可

注意事项:

参考代码:

#include<iostream>
#include<cmath>
#define maxn 105
using namespace std;

void printScreen(char (*result)[maxn], int m, int n, int num);
int main()
{
    int a,b;
    int num=0; 
    char mineWeeper[maxn][maxn]; 
    char mineResult[maxn][maxn];  //存储结果
    while(cin>>a>>b && a!=0 && b!=0){
        num++;
        for(int i=0; i<a; i++){
            for(int j=0; j<b; j++){
                cin >> mineWeeper[i][j];
            }
        }
        int y=0,x=0;
        while(y<a && x<b){
            int cnt=0; //雷数
            if(mineWeeper[y][x] == '*') mineResult[y][x] = '*';
            else{
                for(int i=0; i<a; i++){
                for(int j=0; j<b; j++){
                    if(abs(i-y)<=1 && abs(j-x)<=1 && mineWeeper[i][j]=='*') cnt++;
                }
                }
                mineResult[y][x] = cnt+'0';
            }
            if(x+1>=b){
                y++;
                x = 0;
            }else x++;
        }
        printScreen(mineResult, a, b, num);
    }
     
    return 0;
}

void printScreen(char (*result)[maxn], int m, int n, int num){
    cout << "Field #" << num << ":" <<endl;
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            cout << result[i][j];
            if(j == n-1) cout<<'\n';
        }
    }
    cout<<'\n';
}

 

0.0分

0 人评分

  评论区

  • «
  • »