zoukankan      html  css  js  c++  java
  • P2670 扫雷游戏

    P2670  扫雷游戏(此为超链接)

     

     

    扫雷游戏非常经典解压,通过观察多个数字,最终判断雷的位置。

    (图为扫雷游戏)

    本题目要求将非雷格周围的雷用数字写出;需要先定义二维字符数组(我也不知道怎么叫);运用循环将其输入,进行判断,然后输出结果。

    代码如下:

     

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 int main()
     5 {
     6     int m,n;
     7     char a[101][101];//定义二维字符数组 
     8     cin>>n>>m;
     9     for(int i=0;i<n;i++)
    10     {
    11         for(int j=0;j<m;j++)
    12         {
    13             cin>>a[i][j]; //通过循环输入 
    14         }
    15     }    
    16     for(int i=0;i<n;i++)
    17     {
    18         for(int j=0;j<m;j++)
    19         {
    20             int sum=48;
    21             if(a[i][j]!='*') 
    22             {
    23             /*若为雷,则保持不变。若不为雷,则对周围雷数进行判断*/ 
    24             if(a[i][j]=='?')
    25             a[i][j]='0';//若a[i][j]周围无雷,则输出"0" 
    26             if(a[i-1][j-1]=='*')
    27             {
    28                 a[i][j]=sum+1;
    29                 sum++;
    30             }
    31             if(a[i-1][j]=='*')
    32             {
    33                 a[i][j]=sum+1;
    34                 sum++;
    35             }
    36             if(a[i-1][j+1]=='*')
    37             {
    38                 a[i][j]=sum+1;
    39                 sum++;
    40             }
    41             if(a[i][j-1]=='*')
    42             {
    43                 a[i][j]=sum+1;
    44                 sum++;
    45             }
    46             if(a[i][j+1]=='*')
    47             {
    48                 a[i][j]=sum+1;
    49                 sum++;
    50             }
    51             if(a[i+1][j-1]=='*')
    52             {
    53                 a[i][j]=sum+1;
    54                 sum++;
    55             }
    56             if(a[i+1][j]=='*')
    57             {
    58                 a[i][j]=sum+1;
    59                 sum++;
    60             }
    61             if(a[i+1][j+1]=='*')
    62             {
    63                 a[i][j]=sum+1;
    64                 sum++;
    65             }}
    66         }
    67     }
    68     for(int i=0;i<n;i++)
    69     {
    70         for(int j=0;j<m;j++)
    71             cout<<a[i][j];//将结果输出 
    72         cout<<endl;
    73     }     
    74     return 0; //return 0;好习惯 
    75 }

     

     

     也可以通过判断雷的位置,将其周围的8个格(雷除外)全部+1,再输出答案;具体代码如下:

    #include<iostream>
    using namespace std;
    int main()
    {
        char a[101][101];
        int b[101][101],n,m,i,j;//数组定义(二维)
        cin>>n>>m;//读入行、列
        for(i=0;i<101;i++)
            for(j=0;j<101;j++)
                b[i][j]=0;//给数组赋值为0
        for(i=0;i<n;i++)
            for(j=0;j<m;j++)
            {
                cin>>a[i][j];
                if(a[i][j]=='*')//判断:如果是地雷
                {
                    b[i+1][j+1]++;
                    b[i+1][j-1]++;
                    b[i+1][j]++;
                    b[i][j+1]++;
                    b[i][j-1]++;
                    b[i-1][j]++;
                    b[i-1][j+1]++;
                    b[i-1][j-1]++;//相邻的八个格子都+1                
                }
            }
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(a[i][j]=='*')
                    cout<<"*";//如果是地雷(*) 原样输出
                else
                    cout<<b[i][j];//否则输出数字
            }    
            cout<<endl;
        }
    }


    总结一下:本题考查字符串的知识,我考虑了两种情况(找无雷判断周围;找有雷周围加一),在相同的题目,会有不同的做法,从而写出时间复杂度不同的代码(本题都是O(n^2))再今后刷题再到比赛时,需要有这种变通与发散思维。
     

  • 相关阅读:
    Jmeter配置slave
    Jmeter集合ant进行操作
    PageObject设计模式进行自动化用例的设计方法
    同学,迭代器生成器了解一下
    面向对象的一些方法与属性
    断言与异常
    wtforms-表单生成及验证
    DBUtils--数据库连接池
    Flask请求流程超清大图
    PEP8规范
  • 原文地址:https://www.cnblogs.com/Kyriech-Francis/p/Answer_P2690.html
Copyright © 2011-2022 走看看