這道題目還是很不錯的
《【字串排序】n個數連線得到最小或最大的多位整數》
描述:設有n個正整數,將它們依次連成在一排,組成乙個多位數,現在要求可能組成的多位數中最大的多位數是什麼?
例如:n=3時,3個整數13,312,343連成的最大多位數為:343-312-13。
例如:n=4時,4個證書7,13,4,246連成的最大多位數為:7-4-246-13。
輸入:n個整數,eof結尾。
輸出:最大的多位數。
不能直接用貪心。但是可以這樣:
正確的貪心標準是:先把整數化成字串,然後再比較a+b和b+a,如果a+b>b+a,就把a排在b的前面,反之則把a排在b的後面。
舉例說明正常的字串比較缺陷!如:a=』321』,b=』32』,按照標準的字串比較規則因為a>b,所以a+b > b+a ,而實際上'32132' < '32321'。
所以,自定義一種字串的比較規則:
如果a+b>b+a,則我們認為a>b。
且可以證明:如果a+b>=b+a,b+c>=c+b,則一定有:a+c>=c+a。
這樣一來,程式就很簡單了。分3步:
(1)先把n個數字轉換成字串儲存;
(2)按照自定義的規則把n個字串從大到小排序;
(3)依次輸出這些字串。
貪心演算法 n個數連線得到最小或最大的多位整數
設有n個正整數,將他們連線成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343,連成的最大整數為 34331213 又如 n 4時,4個整數7,13,4,246連線成的最大整數為7424613 輸入 n n個數輸出 連線成的多位數 演算法分析 此題很容易想到使用貪心法,在考試...
字串排序 n個數連線得到最小或最大的多位整數
描述 設有n個正整數,將它們依次連成在一排,組成乙個多位數,現在要求可能組成的多位數中最大的多位數是什麼?例如 n 3時,3個整數13,312,343連成的最大多位數為 343 312 13。例如 n 4時,4個證書7,13,4,246連成的最大多位數為 7 4 246 13。輸入 n個整數,eof...
《演算法之美》 n個數連線得到最小的多位整數
題目 設有n個正整數,將它們連線成一排,組成乙個最小的多位整數?例如 n 2時,2個整數32,321連線成的最小整數是 32132 n 4時,4個整數55,31,312,33連線成的最小整數為 312313355。解答 由於題目涉及到整數的連線,如果直接進行整數的連線,可能會超出整數的表示範圍,因此...