スタックからポップする正当なシーケンス (C 言語) C++

早速ですが、タイトルはこちらです

空のスタック c と正の整数 n があり、1、2、3、...、n1、2、3、... が順番にスタックにプッシュされ、期間内の任意の時点でポップアウトされます。次に、与えられたポップ シーケンスが正当なポップ シーケンスであるかどうかを尋ねます。

入力要件は、

最初の行には整数 n (1≤n≤100) が含まれており、スタックにプッシュする必要がある整数の数を示します。

2行目はポップシーケンスを表す[1,n]を整数をスペースで区切って並べたものです。

出力では、成功の場合は「yes」、失敗の場合は「NO」が出力される必要があります。

以下にいくつかのヒントを示します。

最初はスタックは空、つまり です[]次に、次のシーケンスを実行してポップ シーケンスを取得します3 2 4 1

1.1スタックにプッシュします。この時点でのスタックは[1];

2.2スタックにプッシュします。この時点でのスタックは[1,2];

3.3スタックにプッシュします。この時点でのスタックは[1,2,3];

4.3スタックをポップします。この時点でのスタックは[1,2];

5.2スタックをポップします。この時点でのスタックは[1];

6.4スタックにプッシュします。この時点でのスタックは[1,4];

7.4スタックをポップします。この時点でのスタックは[1];

8.1スタックをポップします。このときのスタックは です[]。 

コードは以下のように表示されます。             

#include <iostream>
#include <stack>
using namespace std;

int main() {
    int n;
    cin >> n;
    stack<int> s;  
    int cur = 1;   
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;   
        while (s.empty() || s.top() != x) {  
            if (cur > n) { 
                cout << "No" << endl;
                return 0;
            }
            s.push(cur++);
        }
        s.pop();  
    }
    if (s.empty()) {  
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
    return 0;
}

                                            大体こんな状況です      

おすすめ

転載: blog.csdn.net/endofdestruction/article/details/132030048