[解题报告]299 - 火车交换 时间限制:3.000秒
题目大意:
培训交换 |
在一个旧火车站上,你可能会遇到最后剩下的“火车交换者之一”。一列火车交换技术是雇员的铁路,其唯一的任务是重新排列列车的车厢。
一旦车被安排在最佳的顺序,所有的火车司机做,下降车厢,一个接一个的负载是在车站。
标题“火车交换技术”源于完成这一任务的第一人,在车站附近的一座铁路桥。而不是垂直开放,桥绕在河中心的一个支柱。船桥旋转90度后,可以通过向左或右。
第一列火车交换技术已经发现了,桥可以操作最多两节车厢就可以了。180度旋转桥,车厢交换的地方,让他重新安排车(作为一个副作用,马车然后面对相反的方向,但是列车的车厢可以将任何一种方式,所以谁在乎)。
现在,几乎所有的火车交换者都死绝了,铁路公司希望他们的操作自动化。部分要开发的程序,是一种常规的决定对于一个给定的列车至少两个相邻的车厢必要的掉期订购的列车。你的任务是创建该例程。
输入规格
输入中包含的第一行上的测试用例的数目( N )。每个测试案例包括两个输入线。一个测试用例的第一行包含一个整数L,确定列车()的长度。第二行一个测试用例中包含数字1 通过 L的排列,表明当前订单的车厢。车的,要责令车厢1是第一位的,然后,等马车大号最后。
输出规格
对于每个测试用例的输出了一句:“ 最佳火车交换需要小号掉期。其中 ,S 是一个整数。
例输入
3 3 1 3 2 4 4 3 2 1 2 2 1
示例输出
最佳火车交换需要1个掉期。 最佳火车交换需要6个掉期。 最佳火车交换需要1个掉期。
参考代码:
1 #include<stdio.h> 2 int train(int a[],int n) 3 { 4 int flag=0,i,j,temp; 5 for(i=0;i<n-1;i++) 6 { 7 for(j=i+1;j<n;j++) 8 if(a[i]>a[j]) 9 { 10 temp=a[i]; 11 a[i]=a[j]; 12 a[j]=temp; 13 flag++; 14 } 15 } 16 return flag; 17 } 18 int main() 19 { 20 int i,j,s,n,flag; 21 int a[50]; 22 while(scanf("%d",&s)!=EOF) 23 for(j=0;j<s;j++) 24 { 25 scanf("%d",&n); 26 for(i=0;i<n;i++) 27 scanf("%d",&a[i]); 28 flag=train(a,n); 29 printf("Optimal train swapping takes %d swaps.\n",flag); 30 } 31 return 0; 32 }