> 文章列表 > 华为OD机试真题(Java),分班(100%通过+复盘思路)

华为OD机试真题(Java),分班(100%通过+复盘思路)

华为OD机试真题(Java),分班(100%通过+复盘思路)

在这里插入图片描述

一、题目描述

幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友是否同班,请你帮忙把同班的小朋友找出来。

小朋友的编号为整数,与前一位小朋友同班用Y表示,不同班用N表示。

二、输入描述

输入为空格分开的小朋友编号和是否同班标志。

比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。

其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。

不考虑输入格式错误问题。

三、输出描述

输出为两行,每一行记录一个班小朋友的编号,编号用空格分开。且:

  1. 编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行;
  2. 若只有一个班的小朋友,第二行为空行;
  3. 若输入不符合要求,则直接输出字符串ERROR。

四、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);String[] arr = sc.nextLine().split(" ");List<Integer> list1 = new ArrayList<>();List<Integer> list2 = new ArrayList<>();int pre = 1;for (int i = 0; i < arr.length; i++) {String[] num = arr[i].split("/");if (i == 0){list1.add(Integer.parseInt(num[0]));pre = 1;continue;}if (pre == 1){if (num[1].equals("Y")){list1.add(Integer.parseInt(num[0]));}else {list2.add(Integer.parseInt(num[0]));pre = 2;}}else {//Nif (num[1].equals("Y")){list2.add(Integer.parseInt(num[0]));}else {list1.add(Integer.parseInt(num[0]));pre = 1;}}}Collections.sort(list1);Collections.sort(list2);for (int i = 0; i < list1.size(); i++) {System.out.print(list1.get(i) + " ");}System.out.println();for (int i = 0; i < list2.size(); i++) {System.out.print(list2.get(i) + " ");}
}

五、效果展示

在这里插入图片描述

🏆本文收录于,华为OD机试2023(Java)

本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。
在这里插入图片描述