設有n個正整數,將他們連線成一排,組成乙個最大的多位數。
如:n=3時,3個整數13,312,343,連線成的最大整數為34331213。
如:n=4時,4個整數7,13,4,246連線成最大整數為7424613。
有多組測試樣例,每組測試樣例包含兩行,第一行為乙個整數n(n<=100),第二行包含n個數(每個數不超過1000,空格分開)。
每組資料輸出乙個表示最大的整數。
一:明顯我們不能直接比較他們的大小,
二:接下來,有的人可能就會去比較兩個數的最高位,然後次高位,直至最後,所以我們要去獲取每個數的每一位數,這樣就會 特別麻煩,因此所以我們用string來儲存每乙個數字,這樣取每一位都比較容易 。但是這種思想是 錯誤的。
比如我們來看963 和 96,因為96沒有第三高位所以按道理來說963應該在96前面就是96396,但是96396沒有96963大,
那麼我們在判斷96沒有第三高位時,此時我們就要在從96的第一高位比較,直到比較出來或則位數最多的那個數比較完(也 就是最大的數)。具體實現看下圖
這種思路可以實現,但是**很麻煩。我們來看第三種思路。
三:首先我們知道我們可以通過某種方法將我們給的這些的資料進行排序,使得排序後的資料剛好是組成最大數的順序。
既然我們是要將這些資料進行鏈結,比如963 和 96,我們如何盤端96應該在963之前呢???很簡單啊那就是比較嗎,我們設定兩個中間變數,乙個是96396,乙個是96963,那我們比較他們的大小,當正序鏈結比逆序鏈結大的時間,那麼就說明963 和 96的順序不用變化,否則交換資料。其實就是變相的選擇排序。
#includeusing namespace std;
#include#include#includeint main()
string temp;
string tempa;
string tempb;
for(i=0;i
}cout<
}return 0;
}
尋找最大數
描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n,m n可能是乙個很大的整數,但其位數不超過100位,並且保證資料...
尋找最大數
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n...
尋找最大數
尋找最大數 三 時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出每組...