题目
描述: 题目标题:铁路栈问题
铁路的调度站如下:
火车编号为:1~9,且不重复。
如:编号分别为“1”、“2”、“3”、“4”、“5”的5个火车顺序进站,那么进站序列为“12345”,全部进站后再顺序出站,则出站序列为“54321”,如果先进1,2,然后2出站,然后1出站,然后再3进站、出站,4进站、出站,5进站、出站,那么出站序列就为21345.
详细描述:
int JudgeTrainSequence (int maxNum, char *pOutSeq);
输入参数:
int maxNum:进站的火车最大编号
char* pOutSeq:使用字符串表示火车出站序列
输出参数(指针指向的内存区域保证有效):
无。
返回值:
Int: 根据输入的进站序列判断,如果输入的出站序列是可能的,返回1,否则返回0;
练习阶段: 高级
代码
/*--------------------------------------- * 日期:2015-07-01 * 作者:SJF0115 * 题目:铁路栈问题 * 来源:华为机试练习题 -----------------------------------------*/
#include <iostream>
#include <string.h>
#include <stack>
using namespace std;
/* 详细描述: int JudgeTrainSequence (int maxNum, char *pOutSeq); 输入参数: int maxNum:进站的火车最大编号 char* pOutSeq:使用字符串表示火车出站序列 输出参数(指针指向的内存区域保证有效): 无。 返回值: Int: 根据输入的进站序列判断,如果输入的出战序列是可能的,返回1,否则返回0; */
int JudgeTrainSequence (int maxNum, char *pOutSeq){
if(pOutSeq == NULL || maxNum <= 0){
return 0;
}//if
int size = strlen(pOutSeq);
stack<int> trainSeq;
// 初始
int index = 1;
for(int i = 0;i < size;){
if(trainSeq.empty() || trainSeq.top() < pOutSeq[i] - '0'){
trainSeq.push(index);
++index;
}//if
else{
trainSeq.pop();
++i;
}//else
}//for
if(!trainSeq.empty()){
return 0;
}//if
return 1;
}