排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種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...