思路:
这道题的思路就是进行排序,但不同于以往是根据数的大小排序,这道题是根据最高位最大就放在越前面。那么要怎么解决最高位越大排得越前这个问题呢,我们就会想到用字符串比较大小,就可以解决,所以我们要将输入的这些数都设置为String类型。然后我们选择用冒泡排序的原型,(冒泡排序就是一系列相邻数字的比较,正序排列则小的放前,大的放后)对冒泡排序原来的数字比较大小,变为字符串的比较大小。但还有一个问题就是,
对于321和32这两个字符串的比较,正确做法应该是把32放前面。显然,如果只用字符串的比较,对于这种情况会出bug,所以想到对于两个相邻的字符串,我们先让这两个字符串s1和s2正反结合,即str1=s1+s2和str2=s2+s1。然后比较哪个更大。如果str2更大,显然要把s2放前s1放后。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n;
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
String[] str=new String[n];
for(int i=0;i<n;i++){
str[i]=scanner.next();
}
for(int i=1;i<=n-1;i++){
for(int j=0;j<=n-1-i;j++){
String s1=str[j]+str[j+1];
String s2=str[j+1]+str[j];
if(s1.compareTo(s2)<0){ //如果s2更大,则应交换两数
String t=str[j];
str[j]=str[j+1];
str[j+1]=t;
}
}
}
for(int i=0;i<n;i++){
System.out.print(str[i]);
}
}
}