拼数(排序)

题面(from luogu)
拼数
设有 n 个正整数 (n≤20) ,将它们联接成一排,组成一个最大的多位整数。
例如:n=3 时, 3 个整数 13 , 312 , 343 联接成的最大整数为: 34331213
又如:n=4 时, 4 个整数 7 , 13 , 4 , 246 联接成的最大整数为: 7424613

输入格式:
第一行,一个正整数 n。
第二行, n 个正整数。
输出格式:
一个正整数,表示最大的整数
样例.in
3
13 312 343
样例.out
34331213

题目分析
很多人看到这一道题目时,一定会联想到贪心(我也一样),但是细想一下,我们用的是强悍的C++呀,这里面的“sort”是可以给字符串排序的,针对这一道题目,我们只要改变一下条件即可了。

如下:

bool cmp(string a,string b) //这是在给字符串和结构体时才有必要写到的,普通的sort排序是有默认的字典序的
{
    return a+b > b+a;    //看把后面的放前面大,还是直接拼会大
}

代码

#include <bits/stdc++.h>
using namespace std;

string a[40];

bool cmp(string a,string b)  //这是在给字符串和结构体时才有必要写到的,普通的sort排序是有默认的字典序的
{
    return a+b > b+a;   //看把后面的放前面大,还是直接拼会大
}

int n;
int main()
{
    cin>>n;   //输入
    for (int i = 1; i <= n; i++)
        cin>>a[i];

    sort(a+1,a+n+1,cmp); //开始排序,要注意是a+1和a+n+1,因为C++的数组是从0开始的,后面的cmp是我们自己在上文定义的改变排序类型的函数

    for (int i = 1; i <= n; i++)
        cout<<a[i];            //直接输出,因为没有结合,所以在排序里只是交换,因而在此模拟拼接的过程
    return 0;     //完美的结束程序
} 
                                      **蒟蒻新星c_uizrp_dzjopkl原创**

猜你喜欢

转载自blog.csdn.net/c_uizrp_dzjopkl/article/details/81664923