洛谷-P1116 車廂重組

題目描述

在一箇舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章