题目描述
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
输入描述:
有多组测试样例,每组测试样例包含两行,第一行为一个整数N(N<=100),第二行包含N个数(每个数不超过1000,空格分开)。
输出描述:
每组数据输出一个表示最大的整数。
1 2 3 4 5 6 7 8 9 10 11
| 示例1 输入
2 12 123 4 7 13 4 246 输出
12312 7424613
|
解答
首先,本题可以理解为对N个数进行排序,只不过排序的标准不是数值的大小,而是两个字符串组合到一起转化成整形后的数值大小,所以只需要随便采用一种排序方法,在比较大小时改成比较字符串组合的大小就行。
话不多说,上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| import java.util.Scanner;
public class Main {
public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = Integer.valueOf(in.nextLine().trim()); if (count > 100) return; String inStr = in.nextLine().trim(); String[] dataStr = inStr.split(" "); int[] data = new int[dataStr.length]; for (int i = 0; i < dataStr.length; i++) { data[i] = Integer.valueOf(dataStr[i]); }
for (int pass = data.length - 1; pass >= 0; pass--) { for (int i = 0; i < pass; i++) { if (!is1stBiggerThan2nd(data[i], data[i + 1])) { int tem = data[i + 1]; data[i + 1] = data[i]; data[i] = tem; } } }
String result = ""; for (int each : data) { result += String.valueOf(each); } System.out.println(result); }
static boolean is1stBiggerThan2nd(Integer a, Integer b) { if (Integer.valueOf(String.valueOf(a) + String.valueOf(b)) > Integer.valueOf(String.valueOf(b) + String.valueOf(a))) return true; else return false; } }
|
最终程序运行结果如下
运行时间:169ms
占用内存:13040k
如果有任何问题,欢迎指正。