hdu 1022 Train Problem I (栈的操作,还水了半天)

 题意:

      输入的两列字符串,第一列表示进入的顺序,第二列表示出去的顺序,问是否符合后进先出。

#include<stdio.h>

#include<iostream>

#include<string.h>

#include<stack>

using namespace std;

int main()

{

    int n,i,j,k;

    char a[5000],b[5000];

    while(scanf("%d",&n)!=EOF)

    {

        stack<char>s;

        scanf("%s",a);

        scanf("%s",b);

        for(i=0,j=0,k=0;i<n&&j<n;)

        if(a[i]!=b[j])

        {

            //goto RE;

            s.push(a[i]);//入栈完毕

            i++;

        }

        else

        {

             while(!s.empty())

            {

                j++;

                if(s.top()==b[j])

                s.pop();//出栈

                else {j--;break;}

            }

            i++,j++;

        }

        if(!s.empty())printf("No.\n"),printf("FINISH\n");

        else

        {

            printf("Yes.\n");

            for(i=0,j=0,k=0;i<n&&j<n;)

            if(a[i]!=b[j])

           {

               s.push(a[i]);//入栈完毕

               printf("in\n");

               i++;

            }

            else

           {

               printf("in\nout\n");

               while(!s.empty())

              {

                j++;

                if(s.top()==b[j])//出栈

                {printf("out\n");s.pop();}

                else{j--; break;}

              }

              i++,j++;

           }

           printf("FINISH\n");

        }

    }

    return 0;

}

提示:

       提水,人更水;

       过了测试数据,加测试数据7  1234567 4321576,3 312 123;然后才过;

       找逻辑错不容易啊!

原文地址:https://www.cnblogs.com/XDJjy/p/3005779.html