- 我的理解是这道题就是变相的求 :当入栈顺序为1~n时所有可能的出栈顺序,如果这个出栈顺序能够实现,就输出Yes,否则输出No,我们并不需要求所有的出栈顺序,但是我们需要判断给出的出栈顺序是否能够实现,直接进行模拟进栈出栈;
- 这道题有一个关键的地方在于,如果你用了STL,那么在执行下一次操作前需要把申请的栈内存清空,否则会造成内存超限;
- 还有,每次输入一组数据后,需要输出一个换行符。
代码:
#include<stdio.h>
#include<string>
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> a;
int n,b[1005];
while(scanf("%d",&n)&&n){
while(1){
int i=0,j=0,x=0;
scanf("%d",&b[0]);
if(b[0]==0)
break;
else
{
for(i=1;i<n;i++)
scanf("%d",&b[i]);
}
for(int k=1;k<=n;k++){
a.push(k);
while(!a.empty()&&a.top()==b[j])
{
a.pop();
j++;
}
}
if(j==n)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
while(!a.empty())
a.pop();
}
printf("\n");
}
return 0;
}