题目描述
设有n个正整数a1…an,请将它们联接成一排,相邻数字首尾相接,使得组成的整数最大。
输入描述
输出描述
输出一个正整数,表示可以组成的最大的整数。
输入输出样例
输入:
3
13 312 343
输出:
34331213
最终代码
1. c/c++
#include<bits/stdc++.h>
using namespace std;
string a[21]; //记录20个数,用字符形式
bool cmp (string a, string b)
{ //从大到小字典序排序
return a + b > b + a; //注意体会这个技巧
}
int main( )
{
int n;
cin >> 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;
}
2. java
//代码来源:https://blog.csdn.net/Cypresszky/article/details/107004546
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++)
nums[i] = sc.nextInt();
String[] s = new String[n];
String ans = "";
for(int i = 0; i < n; i++)
s[i] = nums[i] + "";
for(int i = 0; i < n - 1; i++) //比较
for(int j = i + 1; j < n; j++)
if((s[j] + s[i]).compareTo(s[i] + s[j]) < 0) {
String temp = s[j];
s[j] = s[i];
s[i] = temp;
}
for(int i = n - 1; i >= 0; i--)
ans += s[i];
System.out.println(ans);
}
}
3. python