首页 > 代码库 > HDU Train Problem I 1022 栈模拟
HDU Train Problem I 1022 栈模拟
题目大意:
给你一个n 代表有n列 火车, 第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序,
分析一下就知道这,这个问题就是栈, 先进后出吗, 就是问你这个编号有没有可能出现, 有可能的话输出顺序,没可能直接输出No
题目分析:
我们用栈进行模拟, 先判断是否有这种出栈的可能, 假如有这种可能的话我们在模拟 一遍出栈的顺就行了。
每一次有新元素入栈我们就判断他是否雨 第二个字符串的第一个元素是否相等, 假如一样, 就让次元素出栈。
代码
1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <stack> 7 using namespace std; 8 #define maxn 15 9 10 11 bool OK(char str1[], char str2[],int n)//判断是否存在这种出栈的可能12 {13 stack<char> P;14 P.push(‘#‘);//因为有元素要删除赋值, 不能为空, 我们让第一个元素为‘#’15 char ans;16 int i, j;17 for(i=0, j=0; i<n; i++)18 {19 P.push(str1[i]);20 ans = P.top();21 while(ans == str2[j] )22 {23 P.pop();24 j ++;25 ans = P.top();//此处是要赋值判断的, 假如为空的话就无法赋值, 因此我们让第一个元素为‘#’26 }27 }28 if(j == n)29 return true;30 return false;31 }32 33 void Putt(char str1[], char str2[],int n)34 {35 stack<char> P;36 P.push(‘#‘);37 for(int i=0, j=0; i<n; i++)38 {39 P.push(str1[i]);40 printf("in\n");41 char ans = P.top();42 while(ans == str2[j])43 {44 P.pop();45 printf("out\n");46 j ++;47 ans = P.top();48 }49 }50 }51 int main()52 {53 int n;54 char str1[maxn], str2[maxn];55 while(cin >> n >> str1 >> str2)56 {57 if(OK(str1, str2, n) )58 {59 printf("Yes.\n");60 Putt(str1,str2,n);61 }62 else63 printf("No.\n");64 65 printf("FINISH\n");66 }67 return 0;68 }
HDU Train Problem I 1022 栈模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。