目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。
二、输入描述
“,”号分割的多个正整数字符串,不需要考虑非数字异常情况,小组最多25个人。
三、输出描述
最大的数字字符串。
输入 | 输出 | 说明 |
---|---|---|
22,221 | 22221 | |
4589,101,41425,9999 | 9999458941425101 |
四、解题思路
- 输入一行数字,逗号隔开;
- 暴力算法,相邻两个数进行拼接、反拼接比较,如果拼接后的数字小于反拼接的数字,则交换位置;
- 注意使用Long类型,Integer的最大值是2147483647,无法满足两个卡片拼接(卡片上是6位内的正整数拼接);
- 输出组成的最大数字。
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] arr = sc.nextLine().split(",");
// 暴力算法,相邻两个数进行拼接、反拼接比较,如果拼接后的数字小于反拼接的数字,则交换位置
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
// 注意使用Long类型,Integer的最大值是2147483647,无法满足两个卡片拼接(卡片上是6位内的正整数拼接)
if (Long.parseLong(arr[i] + arr[j]) < Long.parseLong(arr[j] + arr[i])) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
// 输出组成的最大数字
StringBuilder builder = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
builder.append(arr[i]);
}
System.out.println(builder);
}
六、效果展示
1、输入
4589,101,41425,9999
2、输出
9999458941425101
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。