設有n個正整數(n ≤ 20),將它們聯接成一排,組成一個最大的多位整數。
例如:n=3時,3個整數13,312,343聯接成的最大整數爲:34331213
又如:n=4時,4個整數7,13,4,246聯接成的最大整數爲:7424613ios
第一行,一個正整數n。 第二行,n個正整數。
一個正整數,表示最大的整數
要用一組正整數組成一個最大的多位整數,很天然的想到給這組正整數c++
按字典序排序,而後按字典序從大到小把這組正整數鏈接起來。數組
但,咱們來看這麼一組數據:30 300。函數
它們能夠組成:spa
30300、30030code
兩個數字。排序
顯然:ci
其中X(n)爲表示字典序大小的函數。get
這和咱們直覺上的大字典序在前,後連接小字典序所組合多位整數更大的判斷不一樣。string
因此,咱們不能直接比較兩個數字典序就的大小,而是要比較兩個數先後放置組成的數是否比較大。
即:
其中,F(x)爲兩正整數組合後的數值大小,A、B爲正整數。
#include<iostream> #include<string> #include<algorithm> using namespace std; string a[40]; bool cmp(const string &a,const string &b){ return a+b<b+a; } int main(){ int n; cin>>n; for(int i=0;i<n;i++)cin>>a[i]; sort(a,a+n,cmp); string s; for(int i=n-1;~i;i--)s+=a[i]; cout<<s<<endl; return 0; }