UVa 10905 Children's Game

来源:互联网 发布:淘宝的a3狗粮怎么样 编辑:程序博客网 时间:2024/06/07 14:57

   There are lots of number games for children. These games are pretty easy to play but not so easy tomake. We will discuss about an interesting game here. Each player will be given N positive integer.(S)He can make a big integer by appending those integers after one another. Such as if there are 4 integers as 123, 124, 56, 90 then the following integers can be made — 1231245690, 1241235690,5612312490, 9012312456, 9056124123, etc. In fact 24 such integers can be made. But one thing is sure that 9056124123 is the largest possible integer which can be made.

   You may think that it’s very easy to find out the answer but will it be easy for a child who has just got the idea of number?


Input

   Each input starts with a positive integer N (≤ 50). In next lines there are N positive integers. Inputis terminated by N = 0, which should not be processed.


Output

   For each input set, you have to print the largest possible integer which can be made by appending allthe N integers.


Sample Input

4

123 124 56 90

5

123 124 56 90 9

5

9 9 9 9 9

0


Sample Output

9056124123

99056124123

99999


题意:把n个正整数连接起来,输出最大的连接结果。


对于任意两个正整数a和b,要么a在前,要么b在前。到底选择a在前还是b在前呢?只要比较一下a-b和b-a是字典序大小就行了。比如9和90,由于990>909,所以a应该在前面。

       依照这样的方法对输入的数字进行排序后再输出就行了。

由于懒得去运算两个数连接后的结果,所以程序中直接用了C++的string类。虽然牺牲了点效率,但是对于本题的数据规模来说并没有什么大的影响。


代码如下:


#include<iostream>#include<string>#include<algorithm>using namespace std;string A[55];bool cmp(string a,string b){    return a+b>b+a;}int main(){    int n;    while(cin>>n&&n)    {        for(int i=0;i<n;i++)            cin>>A[i];        sort(A,A+n,cmp);        for(int i=0;i<n;i++)            cout<<A[i];        cout<<endl;    }}


0 0
原创粉丝点击