题目大意:给出n(n<=50)个数字,n个数字按某种顺序连接,要求最终得到的数字最大。
由于不论怎么连接,最终得到数字的长度总是相同的,所以比较大小的方式,相当于比较数字对应的字符串的字典序大小。于是可以把输入中的n个数字看作字符串。
考虑只有两个字符串的情况,设为a和b,结果要么是a+b,要么是b+a('+'表示字符串连接)。于是,如果a+b>b+a,那么a应该排在b的前面。所以只需要按照这种规则给n个字符串排序即可。
做这道题的时候不是在家,这台电脑里面又没有装g++什么的,写完代码之后没有编译运行直接提交的,于是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 阅读(877)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:排序