B - Train Problem I

火车问题答案
解题思路

  • 1.如果待入栈火车和最顶目标火车相同就进行连续进栈出栈;

  • 2.若是不相同则只是进栈就行;

  • 3.最后利用出栈次数是否与进栈次数相同进行输出答案;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #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;
    }
坚持技术分享,如果帮助到了您,您的支持将鼓励我继续创作!