分班 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

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

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

输入描述

输入为空格分开的小朋友编号和是否同班标志。 比如:6/N 2/Y 3/N 4/Y,表示共4位小朋友,2和6同班,3和2不同班,4和3同班。 其中,小朋友总数不超过999,每个小朋友编号大于0,小于等于999。 不考虑输入格式错误问题。

输出描述

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

1、编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行。

2、若只有一个班的小朋友,第二行为空行。

3、若输入不符合要求,则直接输出字符串ERROR。

示例1

输入:
1/N 2/Y 3/N 4/Y

输出:
1 2
3 4

说明:
2的同班标记为Y,因此和1同班。
3的同班标记为N,因此和1、2不同班。
4的同班标记为Y,因此和3同班。
所以1、2同班,3、4同班,输出为
1 2
3 4

题解

该题目属于贪心算法,也可以归类为字符串处理和数组操作类型的题目。通过对输入进行解析并根据条件将小朋友分班,需要保持结果的升序排列,同时处理异常输入。

解题思路

  1. 数据解析:输入是以空格分开的小朋友编号和是否同班标志。解析时要把小朋友编号与是否同班的标志分离开。

  2. 分班:从第一个小朋友开始,使用两个列表分别存放两个班的小朋友。根据标志 Y 或 N

    判断当前小朋友应该分到哪个班:

    • 如果标志是Y,那么当前小朋友与前一个小朋友同班。
  • 如果标志是N,则当前小朋友与前一个小朋友不同班。

  1. 排序与输出:对于每个班的小朋友的编号,按照升序排列。并根据题目要求输出结果:

    • 若两个班的小朋友编号都不为空,按照第一个编号较小的班级先输出。
  • 若只有一个班的小朋友,则第二行输出空行。

  1. 异常处理:如果小朋友编号不在范围内,直接输出ERROR

Java

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();

        boolean err = false;    // 输入是否不符合要求
        boolean one = true;     // 当前的学生是否属于第一个班
        List<Integer> class1 = new ArrayList<>(); // 第一个班级的小朋友编号
        List<Integer> class2 = new ArrayList<>(); // 第二个班级的小朋友编号
        for (String p : line.split(" ")) {
            int idx = p.indexOf("/");
            int no = Integer.parseInt(p.substring(0, idx));
            char flag = p.charAt(idx + 1);

            // 输入不符合要求
            if (no < 0 || no > 999) err = true;
            if (flag == 'N') one = !one;

            if (one) class1.add(no);
            else class2.add(no);

        }

        if (err) {
      

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试题库&amp;题解2024 文章被收录于专栏

华为OD机考(C卷、D卷)题库(绝对都是原题,命中率 95%以上。),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。

全部评论

相关推荐

3 1 评论
分享
牛客网
牛客企业服务