1310:【例2.2】車廂重組
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 48051 ??? 通過數: 28919
【題目描述】
在一個舊式的火車站旁邊有一座橋,其橋面可以繞河中心的橋墩水平旋轉。一個車站的職工發現橋的長度最多能容納兩節車廂,如果將橋旋轉180度,則可以把相鄰兩節車廂的位置交換,用這種方法可以重新排列車廂的順序。于是他就負責用這座橋將進站的車廂按車廂號從小到大排列。他退休后,火車站決定將這一工作自動化,其中一項重要的工作是編一個程序,輸入初始的車廂順序,計算最少用多少步就能將車廂排序。
【輸入】
有兩行數據,第一行是車廂總數N(不大于10000),第二行是N個不同的數表示初始的車廂順序。
【輸出】
一個數據,是最少的旋轉次數。
【輸入樣例】
4
4 3 2 1
【輸出樣例】
6
首先看一下論怎么寫冒泡排序_博客c++(使用冒泡排序對輸入的n個數字進行升序排列。 可知每趟冒泡排序會冒一個當-CSDN博客
這里給出其他判斷冒泡排序結束的方法
那我們怎么知道排序的時候什么時候結束呢?
非常簡單,只要在發現某個數比下一個數小的時候,將x+1(一共給n個數進行排序)
如果x==n-1,那么我們就排序好了
代碼:
#include<bits/stdc++.h>
using namespace std;
int main(){long long n;//n個數cin>>n;long long a[n+10];//有n個數for(int i=1;i<=n;i++){cin>>a[i];//讀入}long long x=0,cnt=0;//cnt記錄操作次數while(x!=n-1){//x==n-1的時候結束x=0;//每次都要歸0for(int i=1;i<=n-1;i++){if(a[i]>a[i+1]){//大了就交換swap(a[i],a[i+1]);cnt++;//次數增加}else{x++;}}}cout<<cnt;//輸出return 0;
}