首页 > 编程语言 >【华为OD机试】真题B卷-分班问题(JAVA)

【华为OD机试】真题B卷-分班问题(JAVA)

时间:2024-03-12 20:58:17浏览次数:26  
标签:java JAVA people 真题 OD System util Person import

华为OD机试真题汇总目录

    【华为OD机试】真题汇总A+B+C+D券(Python实现)

    【华为OD机试】真题汇总A+B+C+D卷(JAVA实现)

    【华为OD机试】真题汇总A+B+C+D卷(C++实现)

一、题目

题目描述:

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

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

学生序号范围(0,999],如果输入不合法则打印ERROR。

二、输入输出

输入描述:
输入为空格分开的小朋友编号和是否同班标志。
输出描述:
输出为两行,每一行记录一个班小朋友的编号,编号用空格分开,且:1.编号需按照升序排列。2.若只有一个班的小朋友,第二行为空行。

三、示例

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
1/N 2/Y 3/N 4/Y
输出:
1 2
3 4
示例2 输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
1/N 2/Y 3/N 4/Y 5/Y
输出:
1 2
3 4 5

四、解题思路

  1. 从输入中读取一行字符串,将其分割为数组。
  2. 创建 Person 对象数组,根据输入数据初始化每个人的属性。
  3. 如果人员编号不在 0 到 999 之间,输出 "ERROR" 并返回。
  4. 根据规则为每个人分配队伍,确定每个人是属于哪个队伍。
  5. 组装队伍信息,分别存储在两个列表中。
  6. 根据题目要求输出队伍信息,确保编号较小的队伍在前面。

五、参考代码

/*
 * @#coding: utf-8
 * @Author: mgc
 * @Date: 2024-02-02 17:47:00
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-02-02 17:48:55
 */

// import java.util.*;
// import java.util.HashMap;
// import java.util.Scanner;
// import java.util.regex.Matcher;
// import java.util.stream.Stream;
// import java.util.regex.Pattern;
// import java.util.stream.Collectors;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 处理输入
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        String[] splitInput = line.split(" ");
        Person[] people = new Person[splitInput.length];
        boolean isError = false;

        // 解析输入,创建 Person 对象
        for (int i = 0; i < splitInput.length; i++) {
            String[] personInfo = splitInput[i].split("/");
            people[i] = new Person(Integer.parseInt(personInfo[0]),
                                   Objects.equals(personInfo[1], "Y"));
            if (people[i].value < 0 || people[i].value > 999) {
                isError = true;
            }
        }

        if (isError) {
            System.out.println("ERROR");
            return;
        }

        // 分配队伍
        people[0].team = 1;
        for (int i = 1; i < people.length; i++) {
            if (people[i].isTrue) {
                people[i].team = people[i - 1].team == 1 ? 1 : 2;
            } else {
                people[i].team = people[i - 1].team == 1 ? 2 : 1;
            }
        }

        // 组装队伍
        ArrayList<Integer> team1 = new ArrayList<>();
        ArrayList<Integer> team2 = new ArrayList<>();
        for (Person person : people) {
            if (person.team == 1) {
                team1.add(person.value);
            } else {
                team2.add(person.value);
            }
        }

        // 输出队伍信息
        if (team2.isEmpty()) {
            System.out.println(convertListToString(team1));
            System.out.println();
            return;
        }

        // 按照编号顺序输出队伍信息
        if (team1.get(0) < team2.get(0)) {
            System.out.println(convertListToString(team1));
            System.out.println(convertListToString(team2));
        } else {
            System.out.println(convertListToString(team2));
            System.out.println(convertListToString(team1));
        }
    }

    // 将列表转换为字符串
    private static String convertListToString(List<Integer> list) {
        Collections.sort(list);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            sb.append(list.get(i));
            if (i != list.size() - 1) {
                sb.append(" ");
            }
        }
        return sb.toString();
    }

    // 定义 Person 类
    private static class Person {
        int value;
        boolean isTrue;
        int team;

        public Person(int value, boolean isTrue) {
            this.value = value;
            this.isTrue = isTrue;
        }
    }
}

标签:java,JAVA,people,真题,OD,System,util,Person,import
From: https://blog.csdn.net/u014481728/article/details/136661378

相关文章

  • 01-Java程序基础
    标识符与变量标识符标识符可以标志:类名,方法名,接口名,常量名命名规则:只能由字母,数字,下划线,$组成不能以数字开头关键字不能做标识符标识符严格区分大小写例如:classHelloWorld{}classhelloWorld{}这两个类是完全不同的类,但如果用javac编译这个文件仅......
  • 掌握MongoDB,看完这篇文章就够了!!!
    目录1.MongoDB简介2.MongoDB安装3.MongoDB操作3.1数据库相关3.2集合相关3.3数据相关4.MongoDB查询5.MongoDB常用技术6.Python与MongoDB1.MongoDB简介MongoDB是一种NoSQL数据库管理系统,采用文档数据库模型,由MongoDBInc.开发并发布。作为一个面向文档的数据库,Mo......
  • JavaEE开发环境配置(1)
    JavaEE开发环境配置(1)一、实验目的二、实验用的仪器和材料三、实验的步骤和方法四、数据记录和计算五、实验结果或结论六、总结一、实验目的(1)掌握JDK、Maven、Tomcat、Idea等开发环境的安装和配置(2)理解Servlet的基本原理(3)掌握Servlet项目的配置和运行方法二、实验......
  • SimpleUI [12/Mar/2024 19:32:11] "GET /admin/logout/ HTTP/1.1" 405 0 Method Not
    Django使用SimpleUI后,登出报错[12/Mar/202419:32:11]"GET/admin/logout/HTTP/1.1"4050MethodNotAllowed(GET):/admin/logout/MethodNotAllowed:/admin/logout/[12/Mar/202419:36:20]"GET/admin/logout/HTTP/1.1"4050原因升级到5.0后不......
  • Mongodb的CRUD操作
    目录一、插入文档1、插入单个文档2、插入多个文档二、查询文档1、查询某个集合所有文档2、根据条件查询三、更新文档1、更新单个文档2、更新多个文档四、删除文档1、删除所有文档2、删除所有符合条件的文档3、仅删除一个符合条件的文档4、删除集合中某个字段Mon......
  • java毕业设计五邑大学超市网上销售软件设计(Springboot+mysql+jdk1.8+maven3.39)
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:随着互联网技术的飞速发展,电子商务已经成为现代商业活动中不可或缺的一部分。特别是网上超市销售业务,它借助网络平台突破了传统购物的时间和空间限制,为消......
  • JAVA实现算法问题25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排
    JAVA实现算法问题25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛随机数模拟25匹马匹速度importjava.lang.reflect.Array;importjava.util.Arrays;publicclassMa{publicstaticvoidmain(String[]args){......
  • Practical Learned Lossless JPEG Recompression with Multi-Level Cross-Channel Ent
    目录简介模型DCTCoefficientsRearrangement将系数重排Cross-ColorEntropyModelMatrixContextModelMulti-LevelCross-ChannelEntropyModel创新点实验设置训练数据集:测试数据集:训练细节:结果简介JPEG是一种非常流行的压缩方法,然而最近关于图像压缩的研究主要集中在未压......
  • HDFS读数据流程、NN和2NN工作机制、DataNode工作机制、数据完整性
    HDFS读数据流程    事件描述:客户端要下载一个200m的数据文件,hdfs是如何读取的。   两个对象:一个客户端、一个集群   流程:       1.客户端创建一个分布式文件系统(DistributedFileSystem),向集群NameNode请求下载文件。       ......
  • 【使用docker 搭建Java仓库 nexus 】
    yaml---apiVersion:apps/v1kind:StatefulSetmetadata:annotations:k8s.eip.work/displayName:Nexus服务k8s.eip.work/ingress:'false'k8s.eip.work/service:ClusterIPk8s.eip.work/workload:nexuslabels:k8s.eip.work/layer......