題目描述
在一箇舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉180180度,則可以把相鄰兩節車廂的位置交換,用這種方法可以重新排列車廂的順序。於是他就負責用這座橋將進站的車廂按車廂號從小到大排列。他退休後,火車站決定將這一工作自動化,其中一項重要的工作是編一個程序,輸入初始的車廂順序,計算最少用多少步就能將車廂排序。
輸入格式
共兩行。
第一行是車廂總數N( \le 10000)N(≤10000)。
第二行是NN個不同的數表示初始的車廂順序。
輸出格式
一個整數,最少的旋轉次數。
輸入輸出樣例
輸入 #1複製
4 4 3 2 1
輸出 #1複製
6
分析:
不要想那麼複雜了,一次只能交換相鄰兩個數字,貌似比冒泡法還慢,就一遍趟過去,要是後面比前面小就交換,然後再趟一遍,直到不再變化爲止
上AC代碼:
#include<iostream>
using namespace std;
int n;
int hc[10005];
int sum=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>hc[i];
int change=1;
while(change)
{
change=0;
for(int i=1;i<n;i++)
{
if(hc[i+1]<hc[i])
{
swap(hc[i+1],hc[i]);
change=1;
sum++;
}
}
}
cout<<sum;
return 0;
}