问题描述:
设有n个正整数,将它们连接成一排,组成一个最大的多位整数。
例如:n = 3时,3 个整数13,312,343,连成的最大整数为34331213。
又如:n = 4时,4 个整数7,13,4,246,连成的最大整数为7424613。
要求输入 n 个数,输出其所连成的最大整数。
思路:
使用贪心思想,首先把每两个数进行一次组合,把组合过后较大的那个结果的前面那个数排在前面,后面的那个数排在后面;以此类推之后,最后就能得出n个数组合的最大值。
使用字符串来存放输入的数字,字符串组合比较简单,同样两个数字 a 和 b ,不用考虑两个字符串的长度,字符串组合直接使用加符号,所以组合数为 a + b 和 b + a ,比较大小也可以直接改写sort 即(return a + b > b + a ? a + b : b + a)。
Code:
#include<bits/stdc++.h>
using namespace std;
int cmp(string a,string b){//定义字符串排序
if(a + b > b + a) return 1;
return 0;
}
int main(){
int t;
cin >> t;
while(t--){
int n;
string a[n + 1];
cin >> n;
for(int i = 1;i <= n;i ++ ) cin >> a[i];
sort(a + 1,a + 1 + n,cmp);
for(int i = 1;i <= n;i ++ ) cout << a[i];
puts("");
}
return 0;
}
代码运行截图: