较为简单的stack题目
但是还是犯了一些错误:
1、 要想清空栈,直接重新定义较为方便!
2、在if(s.top()==x)时 加上 !s.empty() 否则程序会崩溃
3、 必须要加上i-- 错了好久
#include <bits/stdc++.h> using namespace std; int main()
{
int a[];
int n; while(scanf("%d",&n)&&n)
{ while(){ stack<int>s;//方便重置!
scanf("%d",&a[]);
if(a[]==)break;
for(int i=;i<=n;i++)
{scanf("%d",&a[i]);} int ok=;
int j=;
for(int i=;i<=n;i++)
{ if(j==a[i]){j++;}
else if(!s.empty()&&s.top()==a[i]){s.pop();}//没有 s.empty会崩溃
else if(j<=n){j++;s.push(j-);i--;}//i--至关重要 !!!
else {ok=;break;} } if(ok)printf("Yes\n");
else printf("No\n"); }
printf("\n"); }
return ;
}
#include<bits/stdc++.h>
using namespace std; int main()
{
int n;
while(cin>>n&&n)
{
int a[]={};
while(){ stack<int>k;
scanf("%d",&a[]);if(a[]==)break;
for(int i=;i<n;i++)cin>>a[i]; int ok=;int j=;
for(int i=;i<n;i++)
{
if(a[i]==j){j++;continue;}
else if(!k.empty()&&a[i]==k.top()){k.pop();continue;}
else if(j<a[i])
{
while(j<a[i])
{
k.push(j);j++;
}
j++;
}
else {ok=;break;}
} if(ok)printf("Yes\n");else printf("No\n");
}
cout<<endl; } return ;
}