题目描述
设有 n 个正整数 a1~an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入格式
第一行有一个整数,表示数字个数 n。
第二行有 n 个整数,表示给出的 n 个整数 ai。
输出格式
一个正整数,表示最大的整数
输入输出样例
//输入一:
3
13 312 343
//输出一:
34331213
//输入二:
4
7 13 4 246
//输出二:
7424613
题目分析
由题可知:通过从数字的开头比较各个数字,即可确定排列位置。
int类型会受到数字位数影响,无法比较,故定义为String类型。
通过比较String可以确定位置。从而将数字排序。
需要注意的是:还有一种特殊情况:
若出现: 30 和 300时,30300 > 30030;需要考虑这种特殊情况。
Java代码
package com.CCUT.java;
import java.util.Arrays;
import java.util.Scanner;
/**
* @Author CCUT_chao
* @Software IntelliJ IDEA
* @Time 2022/1/21
*/
public class Test2 {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
int a = sca.nextInt();
String arr[] = new String[a];
for (int i =0; i<a; i++){
arr[i] = sca.next();
}
Arrays.parallelSort(arr);
for (int i = 0; i<a-1; i++){
if (cmp(arr[i] + arr[i+1] ,arr[i+1] +arr[i])){
String temp = arr[i+1];
arr[i+1] = arr[i];
arr[i] = temp;
}
}
for (int j = a-1; j>=0; j--){
System.out.print(arr[j]);
}
}
public static boolean cmp(String a, String b){
if (a.compareTo(b)>0){
return true;
}
return false;
}
}