题目描述
小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。
输入描述
“,”号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人。
输出描述
最大的数字字符串
用例
输入 | 22,221 |
输出 | 22221 |
说明 | 无 |
输入 | 4589,101,41425,9999 |
输出 | 9999458941425101 |
说明 | 无 |
题目解析
题解请看
增加一个测试用例
3,32,321
JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (line) => {
const arr = line.split(",");
arr.sort((a, b) => {
const s1 = a + b;
const s2 = b + a;
return s1 == s2 ? 0 : s1 > s2 ? -1 : 1;
});
console.log(arr.join(""));
});
Java算法源码
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = sc.next().split(",");
Arrays.sort(arr, (a, b) -> (b + a).compareTo(a + b));
StringBuilder sb = new StringBuilder();
for (String s : arr) sb.append(s);
System.out.println(sb);
}
}
Python算法源码
import functools
# 输入获取
arr = input().split(",")
# 排序规则
def cmp(a, b):
s1 = a + b
s2 = b + a
return 0 if s1 == s2 else -1 if s1 > s2 else 1
# 算法入口
def getResult(arr):
arr.sort(key=functools.cmp_to_key(cmp))
return "".join(arr)
# 算法调用
print(getResult(arr))
C算法源码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 25
int cmp(const void* a, const void* b) {
char* A = *((char**) a);
char* B = *((char**) b);
char AB[10000] = {'