Improving! 2021-05-13 20:48 采纳率: 100%
浏览 20
已结题

求问这道题为什么无法正常输出?

PopPush城市有一座著名的火车站。这个国家到处都是丘陵。而这个火车站是建于上一个世纪。不幸的是,那时的资金有限。所以只能建立起一条路面铁轨。而且,这导致这个火车站在同一个时刻只能一个轨道投入使用,因为它缺少空间,两列火车将无路可走。具体看下图。
当地的惯例是每一列火车从A方向驶向B方向时候,会用某种方式将车厢重组。假设火车将要到达A方向,拥有N个车厢(N<=1000),这些车厢按照递增顺序标记为1到N。负责重组车厢的领导,必须知道是否能重组车厢让它驶出B,而这个重组的序列就是a1\a2\a3…aN.请帮助他写一个程序来判断是否可能按照所要求的车厢顺序。你可以假设,单个的车厢可以从列车上分离出来,在他们进入站台之前。并且他们可以自由移动,直到它们上了B轨道。你也可以假设在任意时候站台可以放下无数的车厢。但是只要一个车厢进入站台,它就不能返回A轨道,同时如果它离开了站台驶向B轨道,它就不能返回站台。

#include <stdio.h>
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF){
		int i,j;
		int a[n+5],b[n+5],stack[2000]={0},top=-1;
		for(i=0;i<n;i++){
			a[i]=i+1;
		}
		for(i=0;i<n;i++){
			scanf("%d",&b[i]);
		}
		    i=0;j=0;
			while(i!=n){
			if(a[i]!=b[j]&&top==-1) {
				stack[++top]=a[i];
				i++;
			}
			if(a[i]!=b[j]&&top!=-1){
				if(stack[top]==b[j]) {
				j++;top--;}
				if(stack[top]!=b[j]) {
					stack[++top]=a[i];
					i++;
				}
			}
			if(a[i]==b[j]) {
				i++;j++;
			}}
			
			while(top!=-1){
				if(stack[top]==b[j])  {
				j++;top--;}
				if(stack[top]!=b[j])   
				break;
			}
			
		
		if(top==-1) printf("Yes\n");
		 else printf("No\n");
	}
	return 0;
}
  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2021-05-13 21:05
    关注

    中间三个if的后面两个改为else if

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月16日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效