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;
		}
	}
}
原文地址:https://www.cnblogs.com/LJA001162/p/11180082.html