css變化以及動畫播放
阿新 • • 發佈:2020-10-29
題目POJ 1363
題意
1-n順序入棧,判斷出棧順序是否合法
思路
用棧和佇列,模擬入棧出棧操作
-
將元素順序壓入棧中
-
每壓入一個數字,判斷是否和佇列的頭元素相等,若相等,就在棧和佇列中彈出這兩個元素
-
直到兩元素不相同
-
如果最後棧不為空,說明不是合法序列
輸入
5//序列元素個數
1 2 3 4 5//出棧順序
5 4 1 2 3//出棧順序
0//5個數的序列判斷結束
6//序列元素個數
6 5 4 3 2 1//出棧順序
0//6個數的序列判斷結束
0//輸入結束
程式碼實現
#include <iostream> #include<cstdio> #include<stack> #include<queue> //判斷出棧順序是否正確 int check_is_valid_order(std::queue<int>&order); int main() { int n; int train; scanf("%d",&n); while(n) { scanf("%d",&train); while(train) { std::queue<int>order; order.push(train); for(int i=1;i<n;i++) { scanf("%d",&train); order.push(train); } if(check_is_valid_order(order)) { printf("Yes\n"); } else printf("No\n"); scanf("%d",&train); } putchar('\n'); scanf("%d",&n ); } return 0; } int check_is_valid_order(std::queue<int>&order) { std::stack<int>S; int n=order.size();//1-n順序入棧 for(int i=1;i<=n;i++) { S.push(i); while(!S.empty()&&S.top()==order.front()) { S.pop(); order.pop(); } } if(S.empty()) return 1; else return 0; }