火车问题答案
解题思路
-
1.如果待入栈火车和最顶目标火车相同就进行连续进栈出栈;
-
2.若是不相同则只是进栈就行;
-
3.最后利用出栈次数是否与进栈次数相同进行输出答案;
#include<string.h>
#include<stack>
using namespace std;
int main()
{
int n, i, j, k, flag[50]={0};//flag与k记录进出,1表示进0表示出;j表示出栈次数;
char s1[15], s2[15];
stack <char> s;
while(scanf("%d %s%s",&n,s1,s2)!=EOF)
{
while(!s.empty())
s.pop(); //删除首元素
j = k = 0;
for(i = 0; i < n; i++)
{
s.push(s1[i]);//在队尾插入一个元素
flag[k++] = 1;
while(!s.empty() && s.top() == s2[j])
{
flag[k++] = 0;
s.pop();
j++;
}
}
if(j == n)
{
printf("Yes.\n");
for(i = 0; i < k; i++)
{
if(flag[i])
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}
网友评论