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\n",q[f]);
				f --;//拿出最后放入的那個球 
			}
			else
			{
				printf("輸出 : ");
				printf("Empty!\n");
			}
		}
		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;
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM