題目大意:給出n(n<=50)個(gè)數(shù)字,n個(gè)數(shù)字按某種順序連接,要求最終得到的數(shù)字最大。
由于不論怎么連接,最終得到數(shù)字的長(zhǎng)度總是相同的,所以比較大小的方式,相當(dāng)于比較數(shù)字對(duì)應(yīng)的字符串的字典序大小。于是可以把輸入中的n個(gè)數(shù)字看作字符串。
考慮只有兩個(gè)字符串的情況,設(shè)為a和b,結(jié)果要么是a+b,要么是b+a('+'表示字符串連接)。于是,如果a+b>b+a,那么a應(yīng)該排在b的前面。所以只需要按照這種規(guī)則給n個(gè)字符串排序即可。
做這道題的時(shí)候不是在家,這臺(tái)電腦里面又沒有裝g++什么的,寫完代碼之后沒有編譯運(yùn)行直接提交的,于是AC。
以下是我的代碼:
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
using namespace std;
const int kMaxn(57);
bool cmp(const string &a,const string &b)
{
return (a+b>b+a);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
int n;
while(cin>>n && n)
{
string r[kMaxn];
for(int i=1;i<=n;i++)
cin>>r[i];
sort(r+1,r+n+1,cmp);
for(int i=1;i<=n;i++)
cout<<r[i];
cout<<endl;
}
return 0;
}
posted on 2011-05-20 11:32
lee1r 閱讀(897)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
題目分類:排序