HD 1022 Train Problem I 棧的運用 比較好理解的程式碼
阿新 • • 發佈:2019-02-01
#include <stdio.h>
#include <stdlib.h>
#define max 100
char in[max];//儲存進棧序列
char out[max];//儲存出棧序列
char stack[max];//棧
int flag[max];//標記 0 表示出棧 1 表示入棧
int main()
{
int i,j,n,top,k;
while (scanf("%d",&n)!=EOF)
{
scanf("%s%s",in,out);//輸入兩個字串
top=0;
i=j=k=0;
while (i<n&&j<=n)
{
if(top>0&&stack[top-1]==out[i])//和出棧序列的第一個元素相同則出棧
{
flag[k++]=0;
i++;
top--;
}
else//不同則入棧
{
stack[top++]=in[j];
j++;
flag[k++]=1;
}
}
//printf(">>%d %d %d\n",k,i,j);
if (k==2*n)
{
printf("Yes.\n");
for (i=0;i<2*n;++i)
{
if(flag[i]== 0)
printf("out\n");
else
printf("in\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}
#include <stdlib.h>
#define max 100
char in[max];//儲存進棧序列
char out[max];//儲存出棧序列
char stack[max];//棧
int flag[max];//標記 0 表示出棧 1 表示入棧
int main()
{
int i,j,n,top,k;
while (scanf("%d",&n)!=EOF)
{
scanf("%s%s",in,out);//輸入兩個字串
top=0;
i=j=k=0;
while (i<n&&j<=n)
{
if(top>0&&stack[top-1]==out[i])//和出棧序列的第一個元素相同則出棧
{
flag[k++]=0;
i++;
top--;
}
else//不同則入棧
{
stack[top++]=in[j];
j++;
flag[k++]=1;
}
}
//printf(">>%d %d %d\n",k,i,j);
if (k==2*n)
{
printf("Yes.\n");
for (i=0;i<2*n;++i)
{
if(flag[i]== 0)
printf("out\n");
else
printf("in\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
return 0;
}