心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
题目大意:给出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)
    {
        
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 阅读(862) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:排序

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理