作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,只有后进站的出站了,先进站的才能出站。

要求输出所有火车出站的方案,以字典序排序输出。

输入描述:

有多组测试用例,每一组第一行输入一个正整数N

输出描述:

输出以字典序从小到大排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行,具体见sample。

示例:

输入:

3
1 2 3

输出:

1 2 3
1 3 2
2 1 3
2 3 1
3 2 1

说明:

第一种方案:1进、1出、2进、2出、3进、3出
第二种方案:1进、1出、2进、3进、3出、2出
第三种方案:1进、2进、2出、1出、3进、3出
第四种方案:1进、2进、2出、3进、3出、1出
第五种方案:1进、2进、3进、3出、2出、1出
请注意,[3,1,2]这个序列是不可能实现的。

解题思路:

本题是入栈出栈问题。用队列in存放火车入站的顺序,用out存放出站的顺序,用stack栈模仿入站出站操作;solve函数是递归求解函数,当bool为true时表示入站,为false表示出站;入站则将in弹出一个数据,stack存放一个数据,出站则stack弹出,out存放,出站先判断栈内有无数据,无数据直接返回;递归操作,进行一次出站再进行一次入站;当in队列空了则说明火车全部进站完毕,此时若还进站则直接返回,若栈内还有数据则依次弹出;用write_result函数记录out的结果,格式如1 2 3;递归全部完成则表示所有可能的情况都遍历过了;因为题目要求结果按字典排序,用sort排序后输出即可。

测试代码:

#include <iostream>
#include <vector>
#include <queue>
#include <stack>
#include <algorithm>using namespace std;vector<string> result;
// 写入结果
void write_result(queue<int> q)
{string str;while(!q.empty()){str+=to_string(q.front());str+=' ';q.pop();}result.push_back(str);
}
// 递归求解
void solve(queue<int> in,stack<int> t,queue<int> out,bool flag)
{if(in.empty())            // in队列空了就说明都进完了{if(flag)              // in队列空了不能再进了return;while(!t.empty())     // 栈里若还有数据直接弹出到out队列里{out.push(t.top());t.pop();}write_result(out);    // 记录本次结果return;}else{if(flag)              // 入栈{t.push(in.front());in.pop();}else{                 // 出栈if(t.empty())     // 没得出直接返回return;out.push(t.top());t.pop();}// 递归solve(in,t,out,false); solve(in,t,out,true);}
}int main()
{int num;while(cin>>num){int sequence;queue<int> in,out;stack<int> t;for(int i=0;i<num;++i){cin>>sequence;in.push(sequence);}solve(in,t,out,true);// 按字典顺序排序结果sort(result.begin(),result.end());for(auto it=result.begin();it!=result.end();++it){cout<<*it<<endl;}result.clear();}return 0;
}

华为机试HJ77:火车进站相关推荐

  1. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  2. 牛客在线编程-华为机试-中等

    牛客在线编程题目-华为机试-中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21.21% HJ17 坐标移动 字符串 中等 24.79% HJ20 密码验证合格程序 数组 字 ...

  3. 华为机试108题(C 语言解答)

    Nowcoder题库链接:华为机试 HJ1 字符串最后一个单词的长度(字符串) 输入:hello nowcoder输出:8说明: 最后一个单词为nowcoder,长度为8 示例代码: HJ1.c #i ...

  4. (python)牛客网(华为机试四)——较难

    本博客为博主解题的部分记录,由于均为自己写的,所以答案并非最优解,有很多地方可以优化. 其他题解合集: (python)牛客网(华为机试一)--入门 (python)牛客网(华为机试二)--简单 (p ...

  5. 【华为机试 Python实现】华为机试题集合(已更新171篇)

    文章目录 新手指引 数据结构基础 华为机试真题系列 牛客网华为机试系列 Python 八股文系列 <华为机试真题详解>专栏定价99.9 包含 <华为机试真题>的所有题目. 包含 ...

  6. 【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 前言 金九银十,金三银四.当前正处于校招.社招的火热期,之前就想为正在筹备就业的同学们准备刷题宝 ...

  7. 【华为机试】死记硬背没思路?一般人我劝你还是算了吧

    大家好,我是哪吒. 五月份之前,如果你参加华为OD机试,收到的应该是2022Q4或2023Q1,这两个都是A卷题. 5月10日之后,很多小伙伴收到的是B卷,那么恭喜你看到本文了,抓紧刷题吧.B卷新题库 ...

  8. [华为机试真题][2014]62.去除重复字符并排序

    题目 描述: 去除重复字符并排序 运行时间限制: 无限制 内容限制: 无限制 输入: 字符串 输出: 去除重复字符并排序的字符串 样例输入: aabcdefff 样例输出: abcdef 代码 /*- ...

  9. 牛客网--华为机试在线训练10:字符个数统计

    牛客网–华为机试在线训练10:字符个数统计 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在A ...

最新文章

  1. pip 查看安装路径
  2. php curl 传输大文件,空白目录 · php下载大文件curl · 看云
  3. 前端学习 -- 颜色
  4. 安装fastdfs出现/usr/local/lib/libfastcommon.so: undefined reference to `fcntl64@GLIBC_2.28‘
  5. linux p2p视频播放器,avplayer: 一个基于FFmpeg、libtorrent的P2P播放器实现.
  6. ASP.NET Core on K8S深入学习(9)Secret Configmap
  7. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
  8. 面试官爱问的10大经典排序算法,20+张图来搞定
  9. Postgres 9.2.4的升级方案与步骤
  10. Linux内核多线程实现方法 —— kthread_create函数【转】
  11. 7-2 sdut-oop-5 计算长方体和四棱锥的表面积和体积(类的继承) (10 分)
  12. 电脑小手图标怎么去除_取消共享文件夹图标上的小手
  13. 化学分子溶解度预测模型(python-Rdkit构建)
  14. php b2c是什么意思,bto c模式什么意思?
  15. Java 获取主机ip地址(ipv4)
  16. mt6735通用recovery_Mtkroot ,arm64通用使用无需bl或者rec,安卓7以下使用最佳!
  17. 如何通过idea打包项目到docker
  18. 三星80亿美元收购Harmon真正意图是它?
  19. 2万字雄文:饿了么核心交易系统 5 年演化史!
  20. SMD电容极性的区分

热门文章

  1. java.util.concurrent.ExecutorCompletionService 源码
  2. tex中把参考文献标题删除
  3. 不要在 foreach 循环里进行元素的 remove / add 操作
  4. sed,awk,grep学习笔记
  5. 移动端web页面自适应和rem
  6. 神奇的datetime和datetime,一毫秒引发的血案
  7. hadoop-集群安装
  8. 【CCNA考试】2010-06-14-河北-936(PASS)
  9. 好的计算机教学,如何营造良好的计算机课堂教学氛围
  10. javamailsender注入失败_Springboot 之 JavaMailSender发送电子邮件