当前位置: 首页 > news >正文

[华为机试练习题]13.火车进站

题目

描述:     
给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。

题目类别:    栈 
难度:  高级 
运行时间限制: 10Sec
内存限制:   128MByte
阶段:  入职前练习 
输入:  
有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1到9。

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

样例输入:   
3
1 2 3

样例输出:   
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1

思路

1、若n=1那么就一种排列方式。
2、n>1时先求出n-1的出栈顺序,再分开将n插入n-1之前,n-1之后和每一个n-1之后的每一个数!

代码

/*---------------------------------------
*   日期:2015-06-30
*   作者:SJF0115
*   题目:火车进站
*   来源:华为上机
-----------------------------------------*/
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

void helper(string &inTrain,vector<string> &outTrain,int index){
    if(index == inTrain.size()){
        return;
    }//if
    if(index == 0){
        string outNum("");
        outNum += inTrain[index];
        outTrain.push_back(outNum);
    }//if
    else{
        vector<string> newOutTrain;
        // 出站序列
        int size = outTrain.size();
        // 第index辆火车进站
        for(int i = 0;i < size;++i){
            // 第i个出站序列
            int count = outTrain[i].size();
            // 寻找前一个进站的火车下标
            int targetIndex;
            for(int j = 0;j < count;++j){
                if(inTrain[index-1] == outTrain[i][j]){
                    targetIndex = j;
                    break;
                }//if
            }//for
            string tmp(outTrain[i]);
            for(int j = targetIndex;j <= count;++j){
                tmp.insert(tmp.begin()+j,inTrain[index]);
                newOutTrain.push_back(tmp);
                tmp.erase(tmp.begin()+j);
            }//for
        }//for
        swap(outTrain,newOutTrain);
    }//else
    helper(inTrain,outTrain,index+1);
}

vector<string> TrainLeft(string inTrain){
    vector<string> result;
    int size = inTrain.size();
    if(size <= 0){
        result;
    }//if
    helper(inTrain,result,0);
    sort(result.begin(),result.end());
    return result;
}

int main(){
    int n;
    //freopen("C:\\Users\\Administrator\\Desktop\\c++.txt","r",stdin);
    while(cin>>n){
        string train("");
        int num;
        for(int i = 1;i <= n;++i){
            cin>>num;
            train += num + '0';
        }//for
        vector<string> trainNum = TrainLeft(train);
        // 输出
        int size = trainNum.size();
        for(int i = 0;i < size;++i){
            int count = trainNum[i].size();
            for(int j = 0;j < count;++j){
                if(j == 0){
                    cout<<trainNum[i][j];
                }//if
                else{
                    cout<<" "<<trainNum[i][j];
                }//else
            }//for
            cout<<endl;
        }//for
    }//while
    return 0;
}

相关文章:

  • FlowLayout浮动布局
  • [转]Spring MVC 中的基于注解的 Controller
  • 该项目的建设maven片:4.协调和依赖,spring依赖注入demo
  • jQuery 弹出窗口的形式一直是具体案件的中心
  • 收集的一些链接
  • 盘点20款表现出众的HTML5游戏
  • VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
  • Linux系统中nc命令的基本用法
  • nginx使用GeoIP限制访问并支持白名单
  • 2015Q1中国手机游戏市场监测报告
  • 烂泥:学习ubuntu之快速搭建LNMP环境
  • U盘安装Windows
  • C语言时间处理
  • PHP IDE 框架 服务器 相关
  • liux下ftp链接服务器的常用命令
  • IP路由与转发
  • Javascript编码规范
  • Lucene解析 - 基本概念
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • React16时代,该用什么姿势写 React ?
  • vue-cli在webpack的配置文件探究
  • windows下如何用phpstorm同步测试服务器
  • 分享一份非常强势的Android面试题
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何学习JavaEE,项目又该如何做?
  • 入口文件开始,分析Vue源码实现
  • 深度解析利用ES6进行Promise封装总结
  • 我感觉这是史上最牛的防sql注入方法类
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 【云吞铺子】性能抖动剖析(二)
  • 如何用纯 CSS 创作一个货车 loader
  • #图像处理
  • (02)vite环境变量配置
  • (poj1.3.2)1791(构造法模拟)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (转)Sql Server 保留几位小数的两种做法
  • (转)重识new
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET/C# 使窗口永不获得焦点
  • .NetCore部署微服务(二)
  • .NET中两种OCR方式对比
  • @拔赤:Web前端开发十日谈
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [BZOJ3223]文艺平衡树
  • [CC-FNCS]Chef and Churu
  • [ffmpeg] x264 配置参数解析