题目描述
设有 nnn 个正整数 a1…ana_1 \dots a_na1…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 nnn。
第二行有 nnn 个整数,表示给出的 nnn 个整数 aia_iai。
输出格式
一个正整数,表示最大的整数
输入输出样例
输入 #1
3
13 312 343
输出 #1
34331213
输入 #2
4
7 13 4 246
输出 #2
7424613
说明/提示
对于全部的测试点,保证 1≤n≤201 \leq n \leq 201≤n≤20,1≤ai≤1091 \leq a_i \leq 10^91≤ai≤109。
解题思路
首先我想到的是分别算出n个数第一个位数,但是当两个数位不一样就麻烦,比如30和300,所以直接把数变为字符串然后开始比较,a+b>b+a然后就变换位置,最后输出整个数组
package 洛谷加训;
import java.util.*;
import java.lang.*;
public class 拼数 {
public static void swap(String[] data,int a,int b) {
String string =data[a];
data[a]=data[b];
data[b]=string;
}
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n=sc.nextInt();
String str[]=new String[n];
for(int i=0;i<n;i++) {
str[i]=sc.next();
}
for(int i=0;i<n-1;i++) {
for(int j=i+1;j<n;j++) {
if(Integer.valueOf(str[j]+str[i])>Integer.valueOf(str[i]+str[j])) {
swap(str,i,j);
}
}
}
for(int i=0;i<n;i++) {
System.out.print(str[i]);
}
}
}