299 - Train Swapping
题目大意
题目原文 http://uva.onlinejudge.org/external/2/299.pdf
火车的排序
题目要求将写有数字1—L的火车车厢按顺序排列好,求需要的次数。这题就是求一堆数字用冒泡排序法排序所需要的交换次数。所以按冒泡排序法计数一下即可。
附上代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 int main() 3 { 4 int n,l,i,j,*p1,*p2,k,num; 5 scanf("%d",&n); 6 while(n--) 7 { 8 scanf("%d",&l); 9 int a[l]; 10 p1=a; 11 p2=a; 12 for(i=0;i<l;i++) 13 { 14 scanf("%d",&a[i]); 15 } 16 num=0; 17 for(i=0;i<l;i++) 18 { 19 p2=p1; 20 p2++; 21 for(j=l-i-1;j>0;j--) 22 { 23 if(*p2<*p1) 24 { 25 k=*p1; 26 *p1=*p2; 27 *p2=k; 28 num++;//每交换一次计数一次。 29 } 30 p2++; 31 } 32 p1++; 33 } 34 printf("Optimal train swapping takes %d swaps.\n",num); 35 } 36 return 0; 37 }