計蒜客系列 挑戰難題27 三值排序

2021-07-04 08:59:58 字數 1013 閱讀 1691

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。

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

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

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

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

樣例1輸入:92

2133

3231

輸出:注:此題使用貪心方法。(參考資料)

#includeint a[1001];

int count[4];//交換次數

int num1, num2, num3, n ,ans = 0;

// num1表示位置為1的地方非1的個數;num2表示位置為2的地方3的個數;num3表示位置為3的地方2的個數;

// ans = x + max(y,z)

int main()

for (int i = 1; i <= count[1]; ++i)

if (a[i] != 1)

++num1;

for (int i = count[1] + 1; i <= count[1] + count[2]; ++i)

if (a[i] == 3)

++num2;

for (int i = count[1] + count[2] + 1; i <= n; ++i)

if (a[i] == 2)

++num3;

int max = 99999;

if (num2 > num3)

max = num2;

else

max = num3;

ans = num1 + max;

printf("%d\n", ans);

return 0;

}

計蒜客系列 挑戰難題19 加一

動態陣列存放了一些個位數字 正數 組成乙個大數。將這個數加1。例如 a 2,3,1,1,4 return 2,3,1,1,5 a 7,8,9 return 7,9,0 格式 第一行輸入乙個正整數n,接下來的一行,輸入陣列a n 每一位都是正數且為個位數 最後輸出新的陣列。樣例1輸入 58 9 9 9...

計蒜客 挑戰難題 跳躍遊戲

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 return true.a 3,2,1,0,4 return false.格式 第一行輸入乙個正整數n,接下來的一行,輸...

計蒜客 三值排序

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