华为OD机试 - 分班问题(Java 2024 E卷 200分)

news2024/11/27 23:41:10

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

幼儿园两个班的同小朋友在排队时混在了一起,每位小朋友都知道自己是否与前面一位小朋友同班,请你帮忙把同班的小朋友找出来。
小朋友的编号是整数,与前一位小朋友同班用Y表示,不同班用N表示。
学生序号范围[0,999],如果输入不合法则打印ERROR。

二、输入描述

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

三、输出描述

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

  1. 编号需要按升序排列。
  2. 若只有一个班的小朋友,第二行为空行。

四、测试用例

测试用例1:

1、输入

1/N 2/Y 3/N 4/Y

2、输出

1 2
3 4

3、说明

第一个小朋友编号1,标志为N,分配到班级A。
第二个小朋友编号2,标志为Y,与前一个同班,分配到班级A。
第三个小朋友编号3,标志为N,与前一个不同班,分配到班级B。
第四个小朋友编号4,标志为Y,与前一个同班,分配到班级B。

测试用例2:

1、输入

1/N 2/Y 3/N 4/Y 5/Y

2、输出

1 2
3 4 5

3、说明

第五个小朋友编号5,标志为Y,与前一个同班,分配到班级B。

五、解题思路

  1. 输入处理与验证:
    • 将输入字符串按空格分割成多个小朋友的记录。
    • 对每个记录进行验证,确保格式为编号/标志。
    • 检查编号是否为整数且在[0,999]范围内。
    • 检查标志是否为Y或N。
    • 若任何验证失败,输出ERROR并终止程序。
  2. 班级分配:
    • 初始化两个班级A和B。
    • 使用一个变量currentClass跟踪当前班级,0表示班级A,1表示班级B。
    • 对于第一个小朋友,标志必须为N,分配到班级A。
  3. 对于后续的小朋友:
    • 若标志为Y,分配到与前一个小朋友相同的班级。
    • 若标志为N,切换到另一个班级分配。
  4. 排序与输出:
    • 对班级A和班级B的编号分别进行升序排序。
    • 按要求格式输出两个班级的编号,若某一班级为空,输出空行。

六、Java算法源码

public class OdTest {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // 读取整行输入
        if (!scanner.hasNextLine()) {
            System.out.println("ERROR");
            scanner.close();
            return;
        }
        String inputLine = scanner.nextLine().trim();
        scanner.close();

        // 如果输入为空,输出ERROR
        if (inputLine.isEmpty()) {
            System.out.println("ERROR");
            return;
        }

        // 分割输入为每个小朋友的记录
        String[] tokens = inputLine.split(" ");

        // 初始化两个班级的列表
        ArrayList<Integer> classA = new ArrayList<>();
        ArrayList<Integer> classB = new ArrayList<>();

        // 当前班级标志,0表示班级A,1表示班级B
        int currentClass = -1;

        // 遍历每个小朋友的记录
        for (int i = 0; i < tokens.length; i++) {
            String token = tokens[i];

            // 检查是否包含'/'
            if (!token.contains("/")) {
                System.out.println("ERROR");
                return;
            }

            // 分割编号和标志
            String[] parts = token.split("/");
            if (parts.length != 2) {
                System.out.println("ERROR");
                return;
            }

            String numberStr = parts[0].trim();
            String flag = parts[1].trim();

            // 检查编号是否为整数
            int number;
            try {
                number = Integer.parseInt(numberStr);
            } catch (NumberFormatException e) {
                System.out.println("ERROR");
                return;
            }

            // 检查编号是否在[0,999]范围内
            if (number < 0 || number > 999) {
                System.out.println("ERROR");
                return;
            }

            // 检查标志是否为'Y'或'N'
            if (!flag.equals("Y") && !flag.equals("N")) {
                System.out.println("ERROR");
                return;
            }

            // 处理班级分配
            if (i == 0) {
                // 第一个小朋友,标志必须是'N',表示开始一个新班级
                if (!flag.equals("N")) {
                    System.out.println("ERROR");
                    return;
                }
                currentClass = 0; // 班级A
                classA.add(number);
            } else {
                if (flag.equals("Y")) {
                    // 与前一个小朋友同班
                    if (currentClass == 0) {
                        classA.add(number);
                    } else {
                        classB.add(number);
                    }
                } else {
                    // 与前一个小朋友不同班
                    currentClass = 1 - currentClass; // 切换班级
                    if (currentClass == 0) {
                        classA.add(number);
                    } else {
                        classB.add(number);
                    }
                }
            }
        }

        // 对两个班级的编号进行升序排序
        Collections.sort(classA);
        Collections.sort(classB);

        // 构建输出字符串
        StringBuilder outputA = new StringBuilder();
        for (int num : classA) {
            outputA.append(num).append(" ");
        }
        // 移除最后一个空格
        if (outputA.length() > 0) {
            outputA.setLength(outputA.length() - 1);
        }

        StringBuilder outputB = new StringBuilder();
        for (int num : classB) {
            outputB.append(num).append(" ");
        }
        // 移除最后一个空格
        if (outputB.length() > 0) {
            outputB.setLength(outputB.length() - 1);
        }

        // 输出两个班级的编号
        System.out.println(outputA.toString());
        System.out.println(outputB.toString());
    }
}

七、效果展示

1、输入

10/N 20/Y 30/Y 40/N 50/Y

2、输出

10 20 30
40 50

3、说明

小朋友10/N分配到班级A。
小朋友20/Y与10同班,分配到班级A。
小朋友30/Y与20同班,分配到班级A。
小朋友40/N与30不同班,分配到班级B。
小朋友50/Y与40同班,分配到班级B。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2186944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试 - 密室逃生游戏(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

杀疯啦-yolov11+deepsort的目标跟踪实现

目录 yolov11介绍——实时端到端物体检测 概述 主要特征 支持的任务和模式 性能指标 总结 deepsort介绍&#xff1a; yolov11结合deepsort实现目标跟踪 效果展示 训练与预测 UI设计 其他功能展示 完整代码实现UI界面 yolov11介绍——实时端到端物体检测 概述 YOLO…

IDEA 使用技巧与插件推荐

目录 前言1. IDEA 使用技巧1.1 快捷键优化与应用1.2 高效调试与日志分析1.3 代码模板与片段的自定义 2. 插件推荐2.1 MyBatisX2.2 Lombok2.3 CheckStyle-IDEA2.4 Key Promoter X2.5 GitToolBox2.6 Rainbow Brackets 3. IDEA 性能优化3.1 内存与堆栈设置3.2 禁用不必要的插件3.3…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(中)

3 结果 在图3.1中&#xff0c;我们展示了第2节描述的8个模型的训练曲线。对于这个图表&#xff0c;我们还包括了6个额外的超小型模型&#xff0c;参数数量少至100,000。正如[KMH20]中观察到的&#xff0c;当有效利用训练计算时&#xff0c;语言建模性能遵循幂律。在将这个趋势再…

FreeRTOS篇15:中断管理

一.中断优先级 任何中断的优先级都大于任务&#xff01; 在我们的操作系统&#xff0c;中断同样是具有优先级的&#xff0c;并且我们也可以设置它的优先级&#xff0c;但是他的优先 级并不是从 015 &#xff0c;默认情况下它是从 515 &#xff0c;0~4 这 5 个中断优先级不是 F…

【逐行注释】PF(Particle filter,粒子滤波)的MATLAB代码(附源代码)

文章目录 程序设计1. 介绍2. 系统模型3. 算法步骤 源代码运行结果 程序设计 1. 介绍 粒子滤波是一种用于动态系统状态估计的先进方法&#xff0c;广泛应用于机器人定位、目标跟踪和金融预测等领域。该算法通过一组粒子及其权重来表示系统状态的概率分布&#xff0c;能够有效处…

JavaSE——面向对象8:Object类详解(==与equals的区别、hashCode、toString方法)

目录 一、与equals()的区别 (一)是一个比较运算符 (二)equals是Object类中的方法&#xff0c;只能判断引用类型 (三)equals方法重写练习 1.练习1 2.练习2 3.练习3 二、hashCode方法 三、toString方法 1.默认返回&#xff1a;全类名(包名类名)哈希值的十六进制 (1)不…

VS编译器实用调试技巧

一.什么是bug bug本意是"昆虫"或"虫子&#xff3d;&#xff0c;现在一般是指在电脑系统或程序中&#xff0c;隐藏着的一些未被发现的缺陷或问题&#xff0c;简称程序漏洞。“Bug"的创始人格蕾丝&#xff0e;赫柏&#xff08;Grace Murray Hopper)&#xff…

算法笔记(七)——哈希表

文章目录 两数之和判定是否互为字符重排存在重复元素存在重复元素 II字母异位词分组 哈希表&#xff1a;一种存储数据的容器&#xff1b; 可以快速查找某个元素&#xff0c;时间复杂度O(1)&#xff1b; 当频繁查找某一个数时&#xff0c;我们可以使用哈希表 创建一个容器&#…

堆的代码和基础知识

堆的向上和向下调整-CSDN博客 1.堆的基础知识 2.堆的代码 Heap.h #pragma once #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<stdbool.h> #include<time.h>// typedef int HPDataType; typedef struct Heap {HPDataTy…

电场磁场,能量密度和平均值(定义式是用实数场计算的,不能直接将定义式里面修改为复数场)

能量密度的定义式&#xff0c;都是实数场 平均能量密度&#xff0c;里面的是复数表示的场。具体推导类似坡印廷矢量 、

4.6章节python中空语句pass保留字作用

在Python中&#xff0c;pass 是一个空语句&#xff0c;它什么也不做。它通常用作占位符&#xff0c;在需要语法上需要一个语句但程序逻辑上不需要执行任何操作的地方。 1.占位符&#xff1a;在编写代码时&#xff0c;如果你还没有决定某个部分应该做什么&#xff0c;可以先用 p…

[深度学习][python]yolov11+bytetrack+pyqt5实现目标追踪

【算法介绍】 YOLOv11、ByteTrack和PyQt5的组合为实现高效目标追踪提供了一个强大的解决方案。 YOLOv11是YOLO系列的最新版本&#xff0c;它在保持高检测速度的同时&#xff0c;通过改进网络结构、优化损失函数等方式&#xff0c;提高了检测精度&#xff0c;能够同时处理多个…

android RadioButton 设置颜色无效

原因好像是 RadioButton 自动被渲染为 MaterialRadioButton 设置颜色使用这个属性 app:buttonTint“color/black” material-components-android/docs/components/RadioButton.md at master material-components/material-components-android (github.com)https://github.…

【MySQL】SQL介绍+基础+DDL+数据备份+还原

目录 一、DDL建库建表 1. 数据库 2. 内部4特征 3. 外部4特征 4. 数据库结构 5. SQL语句分类&#xff08;重点&#xff09; 6. 注意 7. 数据库表的字段类型 8. 存储引擎 9. 数据库表的操作 二、三范式 1. 什么是范式 2. 约束作用 3. 三范式 4. 第一范式&#xff…

Python从入门到高手4.2节-掌握循环控制语句

目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋&#xff0c;指事物周而复始地运动或变…

Sharp.js:简单而又实用的图像处理库

前言 在现代Web开发中&#xff0c;图像处理是一个不可或缺的部分。 前端开发者经常需要处理图像&#xff0c;以确保它们在不同的设备和分辨率上都能保持良好的显示效果。 sharp.js是一个高性能的Node.js模块&#xff0c;它利用了libvips库&#xff0c;提供了快速且高效的图像…

网安学习(js漏洞挖掘)

内容来自bili白帽大法师白帽大法师的个人空间-白帽大法师个人主页-哔哩哔哩视频 (bilibili.com) 四种方式 目录 1、JS中存在插件名字&#xff0c;根据插件找到相应的漏洞直接利用 2、JS中存在一些URL链接&#xff0c;根据URL链接找到相应的页面进一步测试和利用 3、JS中存…

《软件工程概论》作业一:新冠疫情下软件产品设计

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…

Python案例--水仙花数的探索之旅

一、引言 水仙花数&#xff0c;也称为阿姆斯特朗数&#xff0c;是一种特殊的三位数&#xff0c;其各位数字的立方和等于其本身。例如&#xff0c;153就是一个水仙花数&#xff0c;因为 135333153135333153。这种数字的发现不仅展示了数字的内在美&#xff0c;也激发了人们对数…