Description
设有 n 个正整数 a1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
Input
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 ai。
Output
一个正整数,表示最大的整数
Sample 1
Inputcopy | Outputcopy |
---|---|
3 13 312 343 | 34331213 |
Sample 2
Inputcopy | Outputcopy |
---|---|
4 7 13 4 246 | 7424613 |
Hint
对于全部的测试点,保证 1≤n≤20,1≤ai≤10^9。
思路:
参考了n个博客后,发现用sort函数排序再输出是最简单的
数字首尾相接可以当做字符串相加,故题意为有 n 个字符串,s1,s2,…sn,首尾相接形成了一个新字符串,求新字符串字典序最大值。
两个字符串 a,b,如果 a+b>b+a 则 a 排在前面。 当 a 排在 b 前面比 b 排在 a 前面要好,因为字典序更高,所以 a 自然要排在 b 的前面
如:7 和 19 ,比较 7 和 19 哪个放在前面使字典序最大,也就是即比较 719 和 197 哪个大,因为 719 比 197 大,所以把 7 放在 19 前面
有关字典序:字典序-CSDN博客
#include<bits/stdc++.h>
using namespace std;
bool cmp(string a,string b)
{
return a+b > b+a;
}
int main()
{
int n = 0;
cin >> n;
string a[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];
}
return 0;
}
有关sort函数:c++ sort函数-CSDN博客