P2690 扫雷游戏

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

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

(图为扫雷游戏)

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

代码如下:

 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))再今后刷题再到比赛时,需要有这种变通与发散思维。

原文地址:https://www.cnblogs.com/Kyriech-Francis/p/12244637.html

时间: 2024-11-06 17:18:24

P2690 扫雷游戏的相关文章

洛谷P2670 扫雷游戏

题目描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数. 注:一个格子的周围格子包括其上.下.左.右.左上.右上.左下.右下八个方向上与之直接相邻的格子. 输入输出格式 输入格式: 输入文件第一行是用一个

c++ 控制台版 扫雷游戏

白天看了一天书看累了,晚上瞅见扫雷游戏,就自己琢磨着做一个呗.想了一会,也没看别人怎么做的,大概1个多小时完成了这个简单版本的扫雷游戏,由于没怎么学过c#,界面的事情可能迟几天再做,明天要回家啦,哈哈! 先说思路,其实挺简单的. (1) 随机生成10个雷,标记到二维数组里,然后计算八个方向的雷的总数记录下来,这是预处理阶段. (2)输入要翻开的位置的坐标,如果是数字直接显示,是空白的话,这里采用bfs即宽度优先搜索解决,搜到最外层是数字(仅一层)时结束,具体详见代码. // 扫雷程序 #incl

扫雷游戏

扫雷游戏 发布时间: 2017年8月15日 22:17   最后更新: 2017年8月15日 22:21   时间限制: 1000ms   内存限制: 128M 描述 扫雷游戏是一款十分经典的单机小游戏.在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格).玩家翻开一个非地雷格时,该格将会出现一个数字--提示周围格子中有多少个是地雷格.游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格. 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的

基于c++控制台的扫雷游戏

Screen   类用于与控制台交互 gotoxy(short x, short y)跳转到控制台的指定位置 void Init() 获取控制台 句柄 bool changeColor(WORD color)变更颜色 /* 0 = 黑色 8 = 灰色搜索 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 FOREGROUND_BLUE

很久木来博客园了,今天献上周末撸的扫雷游戏咯~~

下面先上效果图 上图为最终效果,界面没美化,有点丑将就将就,,,,哈哈 不多说,上代码看注释已经注释好多,扫雷主要难度在于计算但前点击周围你的安全区域,我的想法是:递归循环计算当前点击的上.下.左.右4个格子,如果遇到空白则继续,如果遇到周围有雷则停止. 由中心点往外扩散,在扩散中肯定回遇到已经处理过的格子,则跳过continue.... html代码 <!doctype html> <html> <head> <meta charset="UTF-8&

C++实现简单的扫雷游戏(控制台版)

C++新手的代码,请各位多包涵. 用C++写的一个简单的控制台版扫雷游戏.玩家通过输入方块的坐标来翻开方块. 只是一个雏形,能够让玩家执行翻开方块的操作并且判断输赢,还未添加标记方块.游戏菜单.记录游戏时间.重新开一局等等的功能. 玩家输入坐标的方式来翻开方块只适用于小型的“雷区”,若“雷区”大了,用坐标会变得很不方便. 代码片段扫雷V1.1 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

红包扫雷游戏软件开发

微信红包扫雷游戏开发,微信红包扫雷软件开发,联系微电188-2624-7572. 微信扫雷游戏模式介绍:1.选 择做庄家的粉丝,发红包可设置多少金额,多少红包数,多少红包尾数为雷, 2.发出去红包后其它粉丝可抢,如果抢的红包尾数是庄家设置的尾数那则是中雷,则需把庄家发的红包金额发给庄家.   以上是做庄家发红包,庄家不会亏本的,总会有一个中雷的,每做一次庄平台会送相对应的积分,积分可去换购产品,做庄家稳赚不亏 再说说如果你做为玩家抢红包,首先条件是你余额需有你抢庄家红包对等的钱,打个比方,庄家发

javascript模拟Windows系统下的扫雷游戏

javascript模拟Windows系统下的扫雷游戏. 说好的一周一篇随笔的,这才第三周就延迟交作业了,深深的自责中... 先玩一把 demo 很久以前写的 当时都没写注释的 刚加上了 (尼玛,好多自己都不认识了 ... ) 不足的敌方就是本来想写个游戏排名的统计的,等有空了再加上(好像每次都这么说 然后就等好久好久...) 还有就是没有实现:点击第一个格子不能是雷的功能 刚才在手机端 打开了下这篇文章 排版完全乱了... <style> ul{padding:0;list-style:no

2015扫雷游戏

题目描述 Description 扫雷游戏是一款十分经典的单机小游戏. 在 n 行 m 列的雷区中有一些格子含有地雷(称之为地雷格) ,其他格子不含地雷(称之为非地雷格) .玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格. 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格.现在给出n行m列的雷区中的地雷分布, 要求计算出每个非地雷格周围的地雷格数.注:一个格子的周围格子包括其上.下.左.右.左上.右上.左下.右下八个方向上与之直接相邻的格子. 输入描述