Sicily 1509.Rails——栈入栈出

2 篇文章 0 订阅
1 篇文章 0 订阅

一、题目:
这里写图片描述

输入输出:
这里写图片描述

二、分析过程:

题目本质意思:
一组数1~N从小到大的顺序入栈,给出出栈的顺序,判断能否满足这种情况(即能否按这种情况出栈)

解题思路:
本质上就是将数1~N按照所给的出栈顺序来出栈,如果出栈成功,说明满足要求,否则不满足要求

具体步骤:
1.先将给出的出栈顺序存在一个数组out中
2.将数据1~N按从小到大的顺序输入到一个栈中,每栈入一个元素后,将栈顶元素与out[j](j初始化为0)比较,如果out[j]等于栈顶元素,则栈顶元素出栈,同时j++,重复这个比较过程直至out[j]不等于栈顶元素。然后继续栈入下一个元素,重复上面的过程
3.如果最后j==N,说明按要求出栈成功,否则出栈不成功

三、代码:

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

int main() {
    int n;
    while(cin >> n && n) { //当n为0时,测试结束 
        int m;
        while(cin >> m && m) { 
        //当输入的第一个数为0时,输出一个空白行,并进入下一个样例测试 
            int out[1000] = {0};
            out[0] = m;
            for(int j = 1; j < n; j++) cin >> out[j];
            stack<int> my;
            int i = 0, j = 0;
            for(i = 0; i < n; i++) {
                my.push(i+1);
                //根据所给的出栈顺序来栈出元素 
                while(j < n && !my.empty() && out[j] == my.top()) {
                    my.pop();
                    j++;
                } 
            }
            // j == n 表示按所给的出栈顺序成功出栈 
            if(j == n) cout << "Yes\n";
            else cout << "No\n";
        }
        if(!m) cout << endl;
    }
    return 0;
}                                          

四、考查点:
1.栈中元素出栈的多种情况
2.栈的基本操作(入栈,出栈)
3.灵活解决问题的能力

五、题后反思
1.一开始题目的意思没有弄清楚,没有弄懂题目的本质(对于这种大段大段的英文题,一定耐心仔细地看完,以后多做英文题!)
2.一开始分析问题的方向不对,想着先分析有哪些栈出情况,企图通过比较来确定最终答案,然后就越分析越乱(情况很多,分析混乱)
3.其实想清楚后,思路很简单,就是看它能不能按要求成功地出栈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值