排序---P1012 [NOIP1998 提高组] 拼数

排序---P1012 [NOIP1998 提高组] 拼数_第1张图片

思路:

这道题的思路就是进行排序,但不同于以往是根据数的大小排序,这道题是根据最高位最大就放在越前面。那么要怎么解决最高位越大排得越前这个问题呢,我们就会想到用字符串比较大小,就可以解决,所以我们要将输入的这些数都设置为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

 

你可能感兴趣的:(算法,java,排序算法)