1051 Pop Sequence (25分)栈

刷题

题意:栈的容量是5,从1~7这7个数字,写5个测试数据

做法:模拟栈

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int a[maxn];
stack<int> st;//不用定义大小呀,
//题目那也只是意味着,到那个大小你需要判断一下,并不是让你真的构造一个那么样大小的栈,
//如果要是越界了还会报错,难道你还要写异常不成? 
int main() {
    int M,N,K;
    cin>>M>>N>>K;
    for(int j=0; j<K; j++) {
        while(!st.empty()){//压根就没想到,要把之前没有清空的栈这样清空 
            st.pop();
        }
        for(int i=0; i<N; i++) cin>>a[i];
        int z=0,flag=1;
        for(int i=1; i<=N; i++) {
            st.push(i);
            if(st.size()>M){//栈的size() 
                flag=0;
                break;
            }
            while(!st.empty() &&st.top()==a[z]){//这里没搞明白,第1次写的是if,而不是while 
            //而自己在脑子里的推演也应该是,如果需要出栈就一直出栈的,可写在代码里却不是那样 
                z++;
                st.pop();
            }
        }
        if(j!=0)cout<<endl;
        if(flag && st.empty()==true)cout<<"YES";//自己定义的flag是一意味着成功,可是最开始写的时候
        //还是写成了!flag,头脑都僵住了 
        else cout<<"NO";
    }
}

唉,好难呀,2021好难呀

原文地址:https://www.cnblogs.com/xx123/p/14337480.html