【栈】射击游戏1

Description

小明很喜欢玩射击游戏。他刚考完了数据结构期末考试,感觉不错,于是又来到了射击娱乐场放松一下。和上次一样,先从老板那租了一把步枪和装有N发子弹的弹夹。这里,再把规则说一遍。在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去。注意:所有的子弹都从枪口上膛。小明感觉这有点像《数据结构》课程中的“栈”的特点。因此在打完了这N发子弹之后,他想验证一下这些子弹打出来的顺序是不是真的满足“栈”的特性。假设N颗子弹的编号为1,2,…,N。子弹从弹夹中取出的顺序也是从1到N,这里N = 10。给定一个子弹被打出的顺序,你可以帮小明验证它满不满足“栈”的打出顺序吗?

Input

可能有多个测试输入,第一行给出总共的测试输入的个数。

每个测试输入只有一行:用空格隔开的十个数,表示子弹打出的编号顺序。

Output

对每个测试输入,输出只有一行:

“Yes”,如果打出顺序满足“栈”的特点;

“No”,如果打出顺序不满足“栈”的特点。

Sample Input

Copy sample input to clipboard

3

1 2 3 4 5 6 7 8 9 10

10 9 8 7 6 5 4 3 2 1

3 1 2 4 5 6 7 8 9 10

Sample Output

Yes

Yes

No

Problem Source: 课程上机练习题

解题思路:

模拟实际,一个数组test存储测例,一个栈bomb存储代表弹道,一个栈gun代表枪。

1.初始化:test读取数据,gun为空,bomb一次编号。

2.首先判断gun非空时,若与test匹配,则当前栈顶pop,继续判断test下一位;

3.若gun为空或不匹配时,给gun上弹,pop掉bomb的栈顶

4.判断:此时bomb为空时,子弹都上枪了,肯定能满足栈的关系,输出yes,否则输出no。

实现代码:

#include<iostream>
#include<stack>
using std::cin;
using std::cout;
using std::endl;
using std::stack;  

int main() {
    int T, tmp, t;     //T个测例
    stack<int> gun;    //栈用来表示枪
    stack<int> bomb;   //栈用来表示弹夹
    int test[10];      //储存测试样例
    bool flag = true;   //true表示弹夹有子弹,false表示弹夹为空 

    cin >> T;
    for (; T > 0; T--) {
        for (int i = 0; i < 10; i++) cin >> test[i];    //读取测例
        for (int i = 10; i > 0; i--) bomb.push(i);      //弹夹的子弹依次编号 

        for (flag = true, tmp = 0, t = 0; t < 10;) {
            if (!gun.empty() && (gun.top() == test[t])) {  //枪非空且枪口与测例当前位置相等
                gun.pop();                             //子弹打出去
                t++;                                  //测例下移
                continue;                             //不上弹,继续重新判断
            }

            if (!bomb.empty()) {                     //弹夹非空 ,给枪上弹
                 tmp = bomb.top();
                 bomb.pop();
                 gun.push(tmp);
            } else {                                 //flag标记弹夹为空,跳出循环
                flag = false;
                break;
            }
        }

        /*弹夹为空,说明子弹都能上枪,则枪肯定都能和测例匹配*/
        if (flag) cout << "Yes";
        else cout << "No";
        /*T个测例,注意栈重新清空 */
        while(!bomb.empty()) bomb.pop();
        while(!gun.empty()) gun.pop();
        cout << endl;
    }

}                                 

(本博文或多或少参考过其他网上资料,但时间已久忘记当初的参考了,在此对他们表示感谢!)

时间: 2024-09-30 16:18:37

【栈】射击游戏1的相关文章

射击游戏---栈与子弹(2)

[栈]射击游戏1 Description 小明很喜欢玩射击游戏.他刚考完了数据结构期末考试,感觉不错,于是又来到了射击娱乐场放松一下.和上次一样,先从老板那租了一把步枪和装有N发子弹的弹夹.这里,再把规则说一遍.在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去.注意:所有的子弹都从枪口上膛.小明感觉这有点像<数据结构>课程中的“栈”的特点.因此在打完了这N发子弹之后,他想验证一下这些子弹打出来的顺序是不是真的满足“栈”的特性.假设N颗子弹的编号为1,2,…,N

【栈】射击游戏(待更新)

Description 小明很喜欢玩射击游戏.这周末,他完成了数据结构作业之后,又来到了射击娱乐场.他从老板那租了一把步枪和装有N发子弹的弹夹.注意:所有的子弹都从枪口上膛.在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去.恰巧,这周二,小明刚上了数据结构中<栈>那一章,于是,他想通过“栈”的数据结构来算出究竟有多少种不同的子弹打出顺序.假设N颗子弹的编号为1,2,…,N.子弹从弹夹中取出的顺序也是从1到N.你可以帮小明解决这个问题吗? Input 可能有多个

SOJ【栈】射击游戏(递推思想)

Description 小明很喜欢玩射击游戏.这周末,他完成了数据结构作业之后,又来到了射击娱乐场.他从老板那租了一把步枪和装有N发子弹的弹夹.注意:所有的子弹都从枪口上膛.在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去.恰巧,这周二,小明刚上了数据结构中<栈>那一章,于是,他想通过“栈”的数据结构来算出究竟有多少种不同的子弹打出顺序.假设N颗子弹的编号为1,2,…,N.子弹从弹夹中取出的顺序也是从1到N.你可以帮小明解决这个问题吗? Input 可能有多个

第一人称射击游戏总结概览

这个游戏小项目为第一人称射击游戏 大概分为几个步骤: 一:主角的制作 1.控制主角移动的实现 要点: character Controller组件的理解 rigidbody组件的理解 colider与rigidbody的理解 用代码控制主角的移动——键盘交互的实现 //操作主角移动 //定义3个值控制移动 float xm = 0, ym = 0, zm = 0; //上下左右运动 if (Input.GetKey(KeyCode.W)) { zm += m_movSpeed * Time.de

Unity3D--学习太空射击游戏制作(二)

步骤三:创建主角 游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为游戏的主角,并赋予他一个脚本,控制他的运动,游戏体的组件必须依赖于脚本才能运行. 01:在Project窗口找到Player.fbx(通过3D Max制作的模型),将其拖动到Hierarchy窗口创建飞船的模型游戏体,然后在Inspector窗口将它的Y轴坐标设置为0,并旋转180度,如图: 02:在Project窗口选择Assets,右键选择Create->Folder创建一个文件夹,取名为Scripts,用于存放脚本文件,

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

Java Swing打猎射击游戏编程代码下载

代码下载地址:http://www.zuidaima.com/share/1858069987494912.htm 原文:Java Swing打猎射击游戏编程代码下载 这是一款java swing编写的打猎射击游戏,从这款游戏的编程中,我们可以练习如何进行射击对象的消失及相关按键的监听. 该游戏的一大亮点还是对运动图片的二级缓冲功能,运行时可以感受到非常的流畅,对于想从事游戏编程的人员来说是必须要掌握的一个技能点. 游戏操作:通过鼠标点击野猪和小鸟来是实现击中功能,子弹不足时提示"装载子弹...

使用Cocos2dx-JS开发一个飞行射击游戏

一.前言 笔者闲来无事,某天github闲逛,看到了游戏引擎的专题,引起了自己的兴趣,于是就自己捣腾了一下Cocos2dx-JS.由于是学习,所谓纸上得来终觉浅,只是看文档看sample看demo,并不会让自己有多大的提升,于是一开始就计划写一个小游戏,以作为自己完成这个阶段学习的一个标志,也算是目标导向吧.完整源码移步Github: https://github.com/RogerKang/JasonAmbitionOnline Demo: http://www.rogerkang.site:

简单的射击游戏HTML+JS实现

一直想自己写一个游戏玩,时间和精力都不太允许,最近几天刚好有空闲时间,就琢磨了这个小游戏. 刚开始想着计算图片重叠事件,然后让炮弹和飞机消失,傻乎乎写了一天,越整越乱.今天一大早晕过来了,改用数组以后全部实现也就花了一个小时,有时候正确的方向真的比努力重要的多 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>射击游戏</title> <l