目录
- 专栏导读
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Java算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、说明
华为OD机试 2023B卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
小明今年升学到了小学1年级来到新班级后,发现其他小朋友身高参差不文,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序。
二、输入描述
第一行为正整数h和n,0<h<200为小明的身高,0<n<50为新班级其他小朋友个数;
第二行为n个正整数,h1~hn分别是其他小朋友的身高,取值范围0<hi<200,且n个正整数;各不相同。
三、输出描述
输出排序结果,各正整数以空格分割和小明身高差绝对值最小的小朋友排在前面,
和小明身高差绝对值最大的小朋友排在后面。
如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面。
四、解题思路
- 第一行为正整数h和n,小明的身高、新班级其他小朋友个数;
- 定义集合list,存储新班级其他小朋友的身高;
- 以空格分割和小明身高差绝对值最小的小朋友排在前面,和小明身高差绝对值最大的小朋友排在后面;
- 如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面;
- 空格分隔并输出。
五、Java算法源码
public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 小明的身高String[] line1 = sc.nextLine().split(" ");int h = Integer.valueOf(line1[0]);// 新班级其他小朋友个数int n = Integer.valueOf(line1[1]);List<Integer> list = new ArrayList<>();String[] arr = sc.nextLine().split(" ");for (String str : arr){list.add(Integer.valueOf(str));}/*** 以空格分割和小明身高差绝对值最小的小朋友排在前面,* 和小明身高差绝对值最大的小朋友排在后面。*/Collections.sort(list, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {int abs1 = Math.abs(o1 - h);int aba2 = Math.abs(o2 - h);// 如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面if (abs1 == aba2) {return o1 - o2;} else {return abs1 - aba2;}}});// 空格分隔并输出StringJoiner stringJoiner = new StringJoiner(" ");for (Integer height : list) {stringJoiner.add(String.valueOf(height));}System.out.println(stringJoiner.toString());
}
六、效果展示
1、输入
100 10
95 96 97 98 99 101 102 103 104 105
2、输出
99 101 98 102 97 103 96 104 95 105
3、说明
🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。