学这篇博客写的代码[PAT A1051]Pop Sequence
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
int m,n,k;
stack<int> st;
scanf("%d %d %d" ,&m,&n,&k);
for(int i=0;i<k;++i){ //对k个待检测序列循环
int p = 1,temp; //p应该设置为1不是0
bool flag = true; //flag要放在循环里面 每次都要定义
while(!st.empty()) st.pop();
for(int j=0;j<n;++j){ //对n个入栈的数字循环
//p是我们模拟入栈的元素
scanf("%d",&temp);
while(p<=temp){
st.push(p);
if(st.size()>m){
flag = false;
break;
}
p++;
}
if(st.top()==temp){
st.pop();//弹出后,继续走向判断下一个数
}
else{
flag = false; //返回NO
continue; //错把continue写成了break,不能推出循环,需要把一行数据都读完
//continue语句和break语句的区别是:continue语句只结束本次循环,
//而不是终止整个循环的执行。 而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
}