藍橋杯 交換瓶子 第七屆藍橋杯省賽C B組

2021-10-03 01:37:19 字數 1238 閱讀 9937

有 n 個瓶子,編號 1∼n,放在架子上。

比如有 5 個瓶子:

2 1 3 5 4
要求每次拿起 2 個瓶子,交換它們的位置。

經過若干次後,使得瓶子的序號為:

1 2 3 4 5
對於這麼簡單的情況,顯然,至少需要交換 2 次就可以復位。

如果瓶子更多呢?你可以通過程式設計來解決。

輸入格式

第一行包含乙個整數 n,表示瓶子數量。

第二行包含 n 個整數,表示瓶子目前的排列狀況。

輸出格式

輸出乙個正整數,表示至少交換多少次,才能完成排序。

資料範圍

1≤n≤10000,

輸入樣例1:

5

3 1 2 5 4

輸出樣例1:

3
輸入樣例2:

5

5 4 3 2 1

輸出樣例2:

2
把他們的關係看成乙個乙個的環, 每次交換乙個,就會把乙個環拆成兩個環,最後要把他變成n個環(就是都是自己和自己連線),那麼需要交換的最少的次數,就是n - cnt; cnt是當前環的數量

**如下:

#include

#include

#include

#include

using

namespace std;

const

int n =

10010

;int n;

int a[n]

;//記錄輸入的陣列

bool st[n]

;//記錄這個數字是否遍歷過

intmain()

printf

("%d\n"

, n - cnt)

;return0;

}

第七屆藍橋杯省賽C B組 交換瓶子

有 n 個瓶子,編號 1 n,放在架子上。比如有 5 個瓶子 2 1 3 5 4要求每次拿起 2 個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5對於這麼簡單的情況,顯然,至少需要交換 2 次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。輸入格式 第一行包含乙個整數...

第七屆藍橋杯省賽C B組 交換瓶子

演算法標籤 圖論 環 置換群 貪心 題目描述 有 n 個瓶子,編號 1 n,放在架子上。比如有 5 個瓶子 2 1 3 5 4 要求每次拿起 2 個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5 對於這麼簡單的情況,顯然,至少需要交換 2 次就可以復位。如果瓶子更多呢?你可...

第七屆 藍橋杯 省賽 第九題 交換瓶子

有n個瓶子,編號 1 n,放在架子上。比如有5個瓶子 2 1 3 5 4 要求每次拿起2個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5 對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。輸入格式為兩行 第一行 乙個正整數n n...