HHUOJ 1389 出栈合法性

HHUOJ 1389 出栈合法性

题目描述

已知自然数1,2,…,N(1<=N<=100)依次入栈,请问序列C1,C2,…,CN是否为合法的出栈序列。

输入

输入包含多组测试数据。
每组测试数据的第一行为整数N(1<=N<=100),当N=0时,输入结束。
第二行为N个正整数,以空格隔开,为出栈序列。

输出

对于每组输入,输出结果为一行字符串。
如给出的序列是合法的出栈序列,则输出Yes,否则输出No。

样例输入

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

样例输出

Yes
No

代码如下:

#include<iostream>
#include<stack>
using namespace std;
stack<int>s;
int main()
{
	int n,k[100];
	while (cin >> n && n != 0)
	{
		int  p;
		for (int i = 1; i <= n; i++)
		{
			cin >> k[i];
		}
		p = 0;//判断入栈出栈
		for(int g=1;g<=n;g++)
		{
			if (k[g] > p)
			{
				for (int i = p + 1; i <= k[g]; i++)
				{
					s.push(i);
					if (k[g] == i)
					{
						p = k[g];
						s.pop();
					}
				}
			}
			else 
			{
				if (k[g] == s.top()) 
				{ 
					s.pop(); 
				}
			}
		}
		if (!s.empty()) cout << "No" << endl;
		else cout << "Yes" << endl;
	    while (!s.empty()) s.pop();//清空栈
	}
}

猜你喜欢

转载自blog.csdn.net/qq_43765333/article/details/88426093