• c++ 栈的基本应用


    c++ 栈的基本应用

    题目描述

    记忆力大考验

    小哼和小哈是一对兄妹,爸妈不在家的时候,小哼自然而然就担负起了照顾妹妹的责任。可别看小哼年纪小,他哄妹妹可有一手呢。今天,小哼就发明了一个小游戏来和小哈玩:
    家里有一个长长的网球筒,还有一堆的网球,网球筒的直径很小,每次只能放进一个网球。小哼把每个网球都编了号(所有网球编号不一样),小哼有两种选择:第一种,拿一个小球放进球筒里;第二种,小哼会从球筒里拿出一个网球。而小哈要做的,就是每次小哼从球筒里拿出网球之前,凭记忆力猜出拿出来的网球编号是多少。

    输入

    输入包括多行,每行描述一条操作信息:
    1.输入字母’I’,后面紧跟着一个整数x(1<=x<=100),表示当前要在球筒中放入编号为x的球;
    2.输入字母’O’,表示当前要从球筒里拿出一个球。

    输出

    输出拿出网球的顺序,每个编号占一行,如果在取球的时候,球筒中已经没有球,请输出” Empty!”。

    样例输入

    O
    I 6
    I 4
    O
    I 7
    I 1
    O
    I 8
    O
    O
    O
    O
    

    样例输出

    Empty!
    4
    1
    8
    7
    6
    Empty!
    

    提示

    代码

    #include <bits/stdc++.h>
    using namespace std;
    long long q[10000000];
    char tmp[10];
    int f;
    int main()
    {
    	memset(q,0,sizeof(q));
    	char c;
    	while (scanf("%c",&c) != EOF)
    	{
    		long long x;
    		if (c == 'I')
    		{
    			printf("输入 : ");
    			cin >> x;
    			f ++;//f是栈里球的个数  
    			q[f] = x;
    		}
    		else
    		{
    			if (f != 0)
    			{
    				printf("输出 : ");
    				printf("%lld
    ",q[f]);
    				f --;//拿出最后放入的那个球 
    			}
    			else
    			{
    				printf("输出 : ");
    				printf("Empty!
    ");
    			}
    		}
    		gets(tmp);
    	}
    } 
    

    记忆力大考验升级版

    题目描述

    游戏进行到一半,小(贱)哈(人)突然有了一个想法:不能老是让小哼考自己呀,现在让我来考考他吧……于是,游戏有了下面这个版本:
    小哈会给出一个放球的顺序,和一个拿球的顺序,小哼需要快速地实现。但是,玩着玩着,小哼发现问题没这么简单,有些序列根本就没有办法做到。现在,把两个序列都告诉你,请你先帮小哼预判一下他能不能做到。

    输入

    输入数据有多组(不会超过100组):
    第一行输出一个整数n,表示现在有n个球(1<=n<=100);
    接下来输入两行,每行n个数(所有的数不超过int范围),分别表示放球的顺序和拿球的顺序。

    输出

    对于每组数据,如果可以实现,输出:”YES!”,否则输出:”NO!”。

    样例输入

    5
    1 2 3 4 5
    3 4 2 1 5
    5
    1 2 3 4 5
    3 1 2 4 5
    

    样例输出

    YES!
    NO!
    

    提示

    Code

    #include <bits/stdc++.h>
    using namespace std;
    int a[101],b[101],s[101],n;
    int p,e;
    int main()
    {
    	bool flag = 0;
    	while (scanf("%d",&n)!= EOF)//一直读到文件末尾 
    	{
    		for (int i = 1;i <= n;i ++)//输入 
    		{
    			cin >> a[i];
    		}
    		for (int i = 1;i <= n;i ++)//输入 
    		{
    			cin >> b[i];
    		}
    		p = 1;e = 0;//e是栈的下标   p是从a[]中拿的顺序   
    		for (int i = 1;i <= n;i ++)
    		{
    			int key = b[i];//key 是现在要 取得数字 
    			while (s[e] != key && p <= n)//如果 正在放入的数字 等于你要取出的数字(key) 
    			{
    ///////////把数字放到栈里面/////////////////// 
    				e ++; 
    				s[e] = a[p];
    				p ++;
    ///////////把数字放到栈里面完毕/////////////////// 
    			}
    			if (s[e] == key)//把这个数字从栈里面删掉 
    			{
    				e --;//删除 
    			}
    			else
    			{
    				flag = 1;//发现不可行 
    				break;
    			}
    		}
    		if (flag == 1)
    		{
    			cout << "NO!" << endl;
    		}
    		else
    		{
    			cout << "YES!" << endl;
    		}
    	}
    }
    
  • 相关阅读:
    参考资料来自 懒兔子 的公众号
    Etcd
    zookeeper 杂记
    十二五
    防火墙
    APScheduler
    docker管理工具protainer
    java学习笔记
    linux学习笔记1
    [POI2007]ZAP-Queries
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11180082.html
Copyright © 2020-2023  润新知