/*
每段数据一个n,后面有多行数据,每组n个整数,最后一行为零,最后一段数据以零结束
求能否由1-n通过栈得到该行数据,能输出“Yes”,不能则输出“No”,每段数据后跟一个空行
*/
#include <stdio.h>
#include <stack>
using namespace std;
int num[1024];
int main()
{
int n;
while(scanf("%d",&n)&&n)
{
while(scanf("%d",&num[0])&&num[0])
{
stack<int>s;//如果不在此处定义栈,则必须在这里对栈置空,否则会有数据遗留
for(int i=1;i<n;i++)
scanf("%d",&num[i]);
for(int i=1,count=0;i<=n;i++)
{
s.push(i);
while(!s.empty()&&s.top()==num[count])//必需先判断非空才能访问栈顶,否则但空栈时访问出错
{
count++;
s.pop();
}
}
printf("%s\n",s.empty()?"Yes":"No");
}
printf("\n");
}
return 0;
}
6453

被折叠的 条评论
为什么被折叠?



