题目描述
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
输入
2 12 123 4 7 13 4 246
输出
12312 7424613
解题思路:这个题就是字符串比较了,大的在前面,小的在后面。但是又不是单纯的字符串比较,比如,"9","909",如果直接比就成了"9"<"909“”了,这样排序得到的就是9099,但是我们应该知道大的应该是9909。所以本题采用两个加起来的做法去做。一个“9”+“909”,一个“909”+"9"。这样两个字符串就是“9909”和“9099”了,接下来比,显然“9909”比“9099”大,所以就是9排在9909前面了。接下来就按这个排序就行了。
代码如下:
import java.util.Scanner;
public class Main {
private static String[] swap(String m, String n)
{
String temp;
temp = m;
m = n;
n = temp;
return new String[] {m,n};
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N=sc.nextInt();
String []Arr=new String [N];
String []Swap=new String [2];
int key=0;
for(int i=0;i<N;i++)
{
Arr[i]=sc.next();
}
for(int i=0;i<N;i++)
{key=0;
for(int j=N-2;j>i-1;j--)
if((Arr[j]+Arr[j+1]).compareTo(Arr[j+1]+Arr[j])<0)
{
Swap=swap(Arr[j], Arr[j+1]);
Arr[j]=Swap[0];
Arr[j+1]=Swap[1];
key++;
}
if(key==0)
break;
}
for(int i=0;i<N;i++)
System.out .print(Arr[i]);
}
}