奶牛喝水最少需要的交換次數

2021-08-07 04:55:08 字數 831 閱讀 7343

題目描述 :

有n(1≤n≤1000)頭奶牛,它們都被標上乙個優先等級編號:1,2或3。用來表示它們喝水時的優先次序,編號為l的最優先,編號為2的其次,編號為3的最後。每天奶牛開始時排成一行,但總是很亂,需要你把它們重新排成編號為1的奶牛在最前面,編號為2的其次,編號為3的奶牛在最後。你能計算出最少需要多少的交換次序來完成這次重排嗎?

輸入描述:

第1行:1個整數n;

第2至n+i行:第i+l行有乙個整數表示開始佇列中第i頭奶牛的編號。

輸出描述:

1行,只乙個整數,表示最少需要交換次數。

測試案例:

輸入 9

2 2 1 3 3 3 2 3 1

輸出 4

解題思路:

1.因為奶牛編號,用一維動態陣列存放;

2.讀入資料時,同時記錄編號為1,2和3的奶牛個數,分別為num1,num2和num3

3.只需要統計交換次數,實際不進行編號交換

#include 

using

namespace

std;

int main()

int res = 0; //交換次數

for (i = 0; i < num1; i++) //遍歷0~(num1-1)

for (i = num1; i < num1+num2; i++) //遍歷num1~(num1+num2-1)

cout

<< res << endl; //輸出交換次數

}system("pause");

return

0;}

最少交換次數

第乙個問題 現在想通過交換相鄰元素的操作把乙個給定序列交換成有序,最少需要交換的次數是多少?比如3 1 2 4 5需要最少交換2次。答案 需要交換的最少次數為該序列的逆序數。證明 可以先將最大數交換到最後,由於是相鄰兩個數交換,需要交換的次數為最大數後面的數的個數 可以看做是最大數的逆序數 然後,交...

最少交換次數

bfs,折半搜尋,因為直接搜大概有 12 13?因為每個狀態都會擴充套件出m種狀態大概是 12 13,然而可以折半搜尋,只搜一半,狀態數變成 12 7可以接受,但是事實上極限資料要跑很長很長時間,據說正解是啟發式搜尋?沒學過 include include include include inclu...

陣列排序 計算最少交換次數

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