首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个简略的题目求指点计算法

2013-09-12 
一个简单的题目求指点计算法列车长的烦恼一个小列车站的站长,每次列车在这里重新编组时他就很烦恼。因为站

一个简单的题目求指点计算法
列车长的烦恼

一个小列车站的站长,每次列车在这里重新编组时他就很烦恼。因为站上只有一个人字形的编组轨道(如图),所有的列车车厢都是从人字轨的右边依次进去,从左边出来。但有一些编组顺序他总编不出来,他怀疑有些编组顺序是不可能完成的,可又找不出那些是顺序是可以编组出,那些不可以。请你写一个程序帮助列车长辨别哪些编组可以完成,哪些不能完成。


输入:

第一行是一个整数K,表示有多少个测试用例,以后每行一个测试用例,每行为n+1个整数,第一个整数为n 表示有多少节车厢,后面n个整数表示需要编组成的顺序。比如说3节车厢,按照1,2,3依次入轨编组,可以在左边形成1 2 3,1 3 2,2 1 3,2 3 1,321。

输出:

每行输出一个测试用例的结果。如果可以编组输出Yes,否则输出No。
 
Sample Input


3 3 1 2 
4 1 2 3 4 

 
Sample Output

No
Yes

算法
[解决办法]

#include<stdio.h>
int train[200],stack[200];
int main()
{
 int k,i,mem,top,num;
 int n;
 scanf("%d",&k);
 while(k--)
 {
  scanf("%d",&n); 
  i = 1;
  while(i<=n)
  {
     scanf("%d",&train[i]);
     i++;
  }
  top=0;
  mem=1;
  num=1;
  stack[0]=-1;
  while(mem<n+1)
  {
   stack[++top]=mem++;
   while(stack[top]==train[num]) 
   { 
    top--;
        num++; 
   }
  }
  if(top==0) 
   printf("Yes\n"); 
  else 
   printf("No\n");
 }
 return 0;
}

[解决办法]
序列中对于任何一个N:所有小于N并位于N之后的数字必须为逆序。
[解决办法]
哈哈,就看四楼的

热点排行