A - 和你在一起

时间限制:1秒 内存限制:128兆
题目描述:
我想和你在一起
直到我不爱你
宝贝 人和人 一场游戏
我愿意为你死去
如果我还爱你
宝贝 反正活着 也没意义
宝贝 我也只能 这样为你
——李志《和你在一起》

例如: n=3 时,3 个整数 13,312,343 联接成的最长时间为: 34331213。又如: n=4 时,4 个整数 7,13,4,246 联接成的最长时间为: 7424613。

输入:
第一行输入T,代表下面有T组数据。
n (1≤n≤20),表示 n 个数。
接下来一行 n 个正整数,大小不超过 104。
输出拼成的最长时间。
样例输入:

1
3
413 623 583

样例输出:

623583413

提示:
https://music.163.com/#/song?id=478491643
来源:NSWOJ

#include <cstdio>
int CMP(int a,int b)
{
    int a1=a,b1=b,la=10,lb=10;
    while(a/la)
    {
        la*=10;
    }
    while(b/lb)
    {
        lb*=10;
    }
    return (a*lb+b)-(b*la+a);
}
int main()
{
    int x,i,j,n;
    int d[20],t;
    scanf("%d",&x);
    while(x--){
        scanf("%d",&n);
        for(i=0; i<n; i++)
        {
            scanf("%d",&d[i]);
        }
        for(j=0; j<n-1; j++)
            for(i=0; i<n-1-j; i++)
            {
                if(CMP(d[i],d[i+1])<0)
                {
                    t=d[i+1];
                    d[i+1]=d[i];
                    d[i]=t;
                }
            }
        for(i=0; i<n; i++)
        {
            printf("%d",d[i]);
        }
        printf("\n");
    }
    return 0;
}//另附c++string代码
#include <bits/stdc++.h>
const int MAXN = 25;
using namespace std;
string str[MAXN];
bool cmp(string a, string b)
{
    return a+b > b+a;//a+b就是b接在a的后面
}
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        int n;
        cin >> n;
        for(int i = 0; i < n; i++)
        {
            cin >> str[i];
        }
        sort(str, str+n, cmp);
        for(int i = 0; i < n; i++)
        {
            cout << str[i];
        }
        cout << endl;
    }
}