注册 登录
编程论坛 C++教室

要自闭了,请大佬找找错误

流照君 发布于 2019-07-16 16:19, 1669 次点击
先给题目链接https://
给一个序列进栈,求给出的序列是否可以出栈得到
程序代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
const int inf=1005;
int main()
{
    int n,m,t,a[inf];
    stack<int> s;
    cin>>n>>m>>t;
    while(t--)
    {
    for(int i=0;i<m;i++)
    cin>>a[i];
    int i=1,j=0;
    while(j<m&&i<=m)
    {
        s.push(i);
        i++;
        while(s.top()==a[j]&&s.size()>0&&j<m&&i<=m)
        {
            j++;
            s.pop();
        }
    }
    if(s.empty()!=true)
    cout<<"NO"<<endl;
    else
    cout<<"YES"<<endl;
    while(s.empty()!=true)
    s.pop();
    }
    return 0;
}



就是这段出错  段错误
    while(s.top()==a[j]&&s.size()>0&&j<m&&i<=m)
        {
            j++;
            s.pop();
        }

[此贴子已经被作者于2019-7-16 16:21编辑过]

2 回复
#2
流照君2019-07-16 16:20
不明白为什么
#3
rjsp2019-07-17 10:08
程序代码:
#include <cstdio>
#include <stack>

bool foo( const unsigned seq[], unsigned n, unsigned m )
{
    unsigned current = 1;
    std::stack<unsigned> s;
    for( unsigned i=0; i!=n; ++i )
    {
        for( ; seq[i]>=current && s.size()<m; )
            s.push( current++ );

        if( s.empty() || s.top()!=seq[i] )
            return false;

        s.pop();
    }
    return true;
}

int main( void )
{
    unsigned m, n, k;
    scanf( "%u%u%u", &m, &n, &k );

    while( k-- )
    {
        unsigned seq[1000];
        for( unsigned i=0; i!=n; ++i )
            scanf( "%u", seq+i );

        printf( "%s\n", foo(seq,n,m)?"YES":"NO" );
    }
}
1