题目描述
对输入整数序列1 2 3 …执行一组栈操作,输出操作的出栈序列。
输入
每行是一个测试用例,表示一个操作序列。操作序列由P和Q两个符号组成,P表示入栈,Q表示出栈。每个操作序列长度不超过1000。
输出
对每个操作序列,输出出栈序列,若操作序列有错误,如栈空时执行出栈操作,输出error。
样例输入 Copy
PQPPQQPPPQPQ
PPPPQQP
PP
PQQPP
PPQQ
样例输出 Copy
1 3 2 6 7
4 3
1 error
2 1
提示
注意,Sample Input中第三行没有出栈操作,因此输出一个空行。
#include"stdio.h"
int main()
{
int s[1000],i,n=0,k,q,t,x,m,j,flag;
char s1[1000];
for (i=1;i<1001;i++)
{
s[i-1]=i;
}
while(scanf("%s",&s1)!=EOF)
{
for (i=1;i<1001;i++)
{
s[i-1]=i;
}
i=0;
n=0;
k=0;
t=0;
x=0;
flag=0;
m=0;
for(i=0;s1[i]!='\0';i++)
{
if(s1[i]=='P')
{
n++;
q=0;
}
else if(s1[i]=='Q'&&s1[i-1]=='Q')
{
k=n;
q++;
k=k-q;
t++;
if(n-t>=0)
{
x=k;
while(x-1>=0)
{
if(s[x-1]==0)
{
x--;
}
else
{
printf("%d ",s[x-1]);
s[x-1]=0;
break;
}
}
}
else if(n-t<0&&flag==0)
{
printf("error ");
flag=1;
break;
}
}
else if(s1[i]=='Q')
{
t++;
if(n-t>=0)
{
m=n;
while(m-1>=0)
{
if(s[m-1]==0)
{
m--;
}
else
{
printf("%d ",s[m-1]);
s[m-1]=0;
break;
}
}
}
else if(n-t<0&&flag==0)
{
printf("error ");
flag=1;
break;
}
q=0;
}
}
printf("\n");
}
}