三值排序(貪心基礎)

2021-08-20 22:40:16 字數 596 閱讀 4939

寫乙個程式計算出,計算出的乙個包括1、2、3三種值的數字序列,排成公升序所需的最少交換次數。

輸入第1行為類別的數量n(1≤n≤1000)

輸入第2行到第n+1行,每行包括乙個數字(1或2或3)。

輸出包含一行,為排成公升序所需的最少交換次數。

922

1333

231

樣例輸出

4

思路:統計1,2,3的個數a,b,c,則最終排序結果分為3個段[0,a),[a,a+b),[a+b,n)

交換的思路是先選其中乙個段,把所有不是這個段的數交換出去。則剩下兩個段只要互換不屬於本段內的數就好了。

我們先選段1,統計所有不是1的數a1,則a1即為第一次交換的次數。

之後統計段2中為3的數a2,和段3中為2的數a3,a2和a3中較大的值即為第二次互換的次數。

#include#includeusing namespace std;

int a[1005];

int main(){

int n;

scanf("%d",&n);

int a=0,b=0,c=0;

for(int i=0;i

4 2三值排序 貪心

題目 排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1...

計蒜客 三值排序(貪心)

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1000...

計蒜客 三值排序(貪心)

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1000...