#include"stdio.h"
#include"stdlib.h"
typedef struct
{
int a[1000];
int m,flag;
int top;
}K;
K *init()
{
K *p;
p=(K*)malloc(sizeof(K));
p->top=-1;
p->flag =-1;
return p;
}
void push(K *p,int x)
{
p->top++;
if(p->top <100 )
{
p->a[p->top ]=x;
p->flag ++;
}
else
printf("error\n");
}
void pop(K *p)
{
int x;
if(p->top ==-1)
printf("error\n");
else
{
x=p->a[p->top];
p->top --;
p->flag --;
//printf("让元素出栈:%d\n",x);
}
}
int main()
{
int i,k,l[1000],t,o[1000],n,j,r;
K *p;
scanf("%d",&k);
while(k>0)
{
p=init();
scanf("%d %d",&n,&t);
p->m=t;
//printf("入栈固定顺序和出火车站顺序:\n");
for(i=0;i<n;i++)
{
scanf("%d",&l[i]);
o[i]=i;
//printf("%d %d\n",l[i],o[i]);
}
i=0;
j=0;
//printf("\n");
while(j<n)
{
r=0;
if(l[j]==p->a[p->top]&&p->top >=0)
{
pop(p);
j++;
r=1;
}
if(l[j]>o[i]&&o[i]>=0)
{
push(p,o[i]);
//printf("入栈:%d\n",p->a[p->top ]);
if(p->flag >=p->m)
{
//printf("此时火车已满,这次入栈失败\n");
break;
}
o[i]=-99;
i++;
r=1;
}
if(l[j]==o[i])
{
//printf("直接驶离火车站:%d\n",o[i]);
if(i<n-1)
{
i++;
}
j++;
r=1;
}
if(r==0)
{
break;
}
}
if(p->top >=0||p->flag>=p->m)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
k--;
}
return 0;
}
[ New Thread ]
Problem 4199 >> 求大佬告知怎么用c写,我的老是错误20% |
201803010218 @ 2019-10-19 14:50:45
|
201803140220 @ 2019-10-21 22:11:20
再考虑一下你的 pop() 函数
对于栈空的输出判断还需要再考量一下 |
201803010218 @ 2019-10-22 14:24:46
抱歉,还是不太能理解....我在主函数里面有判断如果栈没空就输出NO以及调用pop函数之前也判断了栈空,
对于栈空的输出判断是指哪个方面...能细说一下么?...感谢大佬了。。。 |
201803140220 @ 2019-10-22 14:48:49
是我描述的有些不太准确。。。
对!就是在调用 pop() 函数前你判断了栈是否为空 但只是判断了不空才输出,若是栈空了但后面条件不满足你的while()循环就会直接break 然而break后就没有再进行进一步处理 |
201803010218 @ 2019-10-22 15:59:41
我在循环里放了一个标准量r,作用是如果上面3个if 语句都没执行就让while循环break跳出去,
这个时候代表存火车出站顺序的l[ ]数组的元素在栈内但是和栈顶元素不同。栈内元素不可以按那个顺序正常出列 break之后再通过是否为空栈来判断是不是所有火车正常出站(出栈) 在调用pop()函数时判断非空栈才进行,其实如果没有那句 &&p->top >=0 就算是空栈if语句前半部分 (l[j]==p->a[p->top]应该也不会让它进循环吧... |
201803140220 @ 2019-10-22 18:08:52
判断完是不是所有火车正常出站
还需要再判断一下你的j和i是否都走到了头即所有火车都处理完了 我举个例子吧: 若是调度站需要同一辆火车多次出站的时候 你的栈已经空了并且栈顶也没有超限 但由于同一辆火车出两次站是无法实现的 因此实际上应该该输出NO 但你的程序就会出现问题(仍输出YES) |
201803010218 @ 2019-10-22 20:45:04
噢噢噢噢,还可以有两辆一样的火车出站这种情况啊。
原来如此,考虑太少了,刚刚在最后的if语句里加了一个判断条件 现在终于过了,感谢大佬啦,牛啊 |