您的位置:首页 > 编程语言

出栈序列判定 网上一些代码虽然能AC但是有bug

2016-08-04 14:12 204 查看
比如输入

5

1 2 3 4 5

1

4 5 3 2 1

会输出 no

但应该输出yes

改善后的代码

#include<stdio.h>
#include<string.h>
int a[10050];
int b[10050];
int c[10050];
int main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&a[i]);
}
int t;
scanf("%d",&t);
while(t--)
{
for(i=0;i<=n-1;i++)
{
scanf("%d",&b[i]);
}
//printf("*%d*\n",b[5]);
int axia=0;
int bxia=0;
int cxia=0;
while(bxia<=n-1)  //出栈的顺序仍未完全符合
{

if(a[axia]==b[bxia])
{
axia++;
bxia++;
}
else if(cxia-1>=0&&c[cxia-1]==b[bxia])
{

while(c[cxia-1]==b[bxia]&&cxia-1>=0) //cxia-1>=0不能去掉 否则若c[cxia-1]和b[bxia]存储的数相等的话会使cxia的值减到小于0
//就会有点不符合常理了
{
cxia--;
bxia++;
}
}
else if(axia<=n-1)
{
c[cxia++]=a[axia];
axia++;
}
else break;   //c栈不为空,去掉会超时
}
if(cxia==0) printf("yes\n");
else printf("no\n");
}

}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐