UVA 10905 Children's Game

There are lots of number games forchildren. These games are pretty easy to play but not so easy tomake. We will discuss about an interesting game here. Each playerwill be given N positive integer. (S)He can make a biginteger by appending those integers after one another. Such as ifthere are 4 integers as 123, 124, 56, 90 then the followingintegers 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 possibleinteger which can be made.

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

Input

Each input starts with a positiveinteger N (≤ 50). In next lines there are N positiveintegers. Input is terminated by N = 0, which should not beprocessed.

Output

For each input set, you have to printthe largest possible integer which can be made by appending all theN integers.

Sample Input

Output for SampleInput

4
123 124 56 90
5
123 124 56 90 9
5
9 9 9 9 9
0

9056124123
99056124123
99999


题意:

给定几个数字,把他们合起来写成一个数字。要求数字最大。

思路:

利用字符串比较数字大小, 将数字合起来可以直接用‘+’。

cmp函数可以直接将两个数加起来比较大小。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>

using namespace std;


bool cmp(string a, string b)
{
    string c;
    if(a+b > b+a)
        return 1;
    else
        return 0;
}


int main()
{
    int N;

    while(scanf("%d", &N) !=EOF && N)
    {

        string  a[55];
        string fin;
        for(int i=0; i<N; i++)
        {
            cin>>a[i];
        }
        sort(a, a+N, cmp);
        for(int i=0; i<N; i++)
        {
            fin += a[i];
        }
        cout<<fin<<endl;
//        memset(a, '0', sizeof(char));
//        memset(fin, '0', sizeof(char));
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值