题目:

幼儿园两个班的小朋友排队时混在了一起,每个小朋友都知道自己跟前面一个小朋友是不是同班,
请你帮忙把同班的小朋友找出来。
小朋友的编号为整数,与前面一个小朋友同班用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/N 2/Y 3/N 4/Y
 输出
 1 2
 3 4
 说明:2的同班标记为Y因此和1同班
           3的同班标记位N因此和1,2不同班
           4的同班标记位Y因此和3同班

思路:

1.根据要求1编号需要按照大小升序排列,所以用TreeSet来存放数据;

2.先将第一个同学的编号放进第一个班级,此时flag = 1;

3.从第二个同学开始遍历;

4.如果是N说明与前一个同学不同班级,通过flag来判断放入哪个班级,如果前一个同学的               flag=1,那么此时这个同学就放进二班,此时flag应该代表当前这个同学所以flag = 2;

5.如果是Y说明与前一个同学同班级,通过前一个同学的flag来判断放入哪个班级,因为是               同班所以 flag 不变;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.TreeSet;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String str = null;while ((str = br.readLine()) != null) {  //多组输入String[] s = str.split(" ");TreeSet<Integer> one = new TreeSet<>();  //接收第一个班级的学生TreeSet<Integer> two = new TreeSet<>();  //接收第二个班级的学生int flag = 1;  //转换班级标志boolean a = format1(s);  //判断接收的数据是否满足要求if (a){one.add(Integer.parseInt(s[0].substring(0, s[0].indexOf('/'))));for (int i = 1; i < s.length; i++) {int temp =Integer.parseInt(s[i].substring(0, s[i].indexOf('/')));if (s[i].substring(s[i].indexOf('/') + 1).equals("N")) {if (flag == 2) {one.add(temp);flag = 1;} else {two.add(temp);flag = 2;}} else if (s[i].substring(s[i].indexOf('/') + 1).equals("Y")) {if (flag == 1) {one.add(temp);} else {two.add(temp);}}}//判断有没有学生,如果没有说明输入数据有误,输出ERRORif (one.size()==0&&two.size()==0){System.out.println("ERROR");}else {String s1 = one.toString().replaceAll(", ", " ").substring(1).replaceAll("]", "");String s2 = two.toString().replaceAll(", ", " ").substring(1).replaceAll("]", "");if (one.size()==0){       //全是二班学生情况System.out.println(s2);}else if(two.size()==0){  //全是一班学生情况System.out.println(s1);}else {//根据要求1编号小的在第一行输出if (one.first()>two.first()){System.out.println(s2);System.out.println(s1);}else {System.out.println(s1);System.out.println(s2);}}}}else {System.out.println("ERROR");}}}//此方法用来判断接收的字符串数组是否满足要求public static boolean format1(String[] s) {for (int i = 0; i < s.length; i++) {if (!format2(s[i])){return false;}}//判断是否有重复编号for (int i = 0; i < s.length-1; i++) {for (int j = i+1; j < s.length; j++) {if (s[i].substring(0,s[i].indexOf('/')).equals(s[j].substring(0,s[j].indexOf('/')))){return false;}}}return true;}//用正则表达式判断字符串格式是否正确public static boolean format2(String s){boolean matches = s.matches("[0-9&&[^0]][0-9]{0,2}[/][Y[N]]");if (matches){Integer i = Integer.valueOf(s.substring(0, s.indexOf('/')));if (i==999){return false;}}return matches;}}

【华为OD笔试真题JAVA实现】幼儿园找出同班的小朋友相关推荐

  1. 华为od机考题目-幼儿园找出同班的小朋友(幼儿园分班)

    幼儿园两个半的小朋哟排队的时候混合在一起了,每位小朋友都直到自己是否与前面的一位小朋友同伴,请你帮忙把同班的小朋友找出来 小朋友的编号是整数,与前一位同班用Y表示,不同班用N表示 准备两个列表分别保存 ...

  2. 【100%通过率】华为OD机试真题 Java 实现【找出重复代码】【2022.11 Q4 新题】

             所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录

  3. 【华为OD面试真题 JAVA】根据访问日志统计日活和月活

    题目描述 给定一个日志系统,输出n条日志: 日志格式分为几部分,说明如下: 1: 日期yyyy-mm-dd,保证日期都在一个月内 2: ip:.分格式,保证为合法ip(1.1.1.1和1.001.01 ...

  4. 【满分】【华为OD机试真题2023 JAVAJS】找出通过车辆最多颜色

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 找出通过车辆最多颜色 知识点滑窗 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 在一个狭小的路口,每秒只能通过一辆车, ...

  5. 【华为机试真题 Python实现】寻找身高相近的小朋友

    文章目录 前言 题目描述 示例 1 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您 ...

  6. 【华为机试真题Java】从入门到入职-真题列表导读

    写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...

  7. 华为软件测试笔试真题之变态逻辑推理题

    现在很多公司面试,都要求做笔试题.其中有软件测试的基本知识考察,也有不少逻辑推理题,不知道大家有没有遇到过,小编盆友之前面试华为过程中是有幸遇到了,今天整理了几道与大家一起分享下. 第一题 题目: 有 ...

  8. 【华为OD考试真题】报数游戏(Python实现)

    前言: 考试题目大同小异,练习真题是通过考试的捷径,思路仅供参考,如果有更好的思路,欢迎一起交流学习,创作不易,文章若对你有帮助,点个关注,谢谢题目描述 100个人围成一圈,每个人有一个编码,编号从1 ...

  9. 【华为机试真题 JAVA】分班问题-100

    [编程题目 |100分] 分班问题[2021 H2, 2022 Q1,Q2 考试题] 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++262144K,其他语言524288K 64bit ...

最新文章

  1. css字体相关样式的处理
  2. 【译】理解 JavaScript 中函数调用和 this
  3. socket传输过程
  4. php包含文件时显示空白页,php中出现空白页的原因及解决方法汇总_php技巧
  5. mysql杨辉三角_实现杨辉三角
  6. odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图
  7. 架构 | 聊聊我心中的架构设计观
  8. k8s的ingress使用
  9. mysql 建立索引的例子_mysql建立合适的索引的例子
  10. 安装指定版本的GPU版本的tensorflow小技巧
  11. linux ss命令查看端口监听情况
  12. 手把手教你做一个简单的VB数据库程序
  13. visio_连接线样式设置:如箭头线
  14. android打开超链接屏幕太小,手机屏幕太小,教你2种方法投屏到电脑上,小白也能轻松搞定!...
  15. vue实现一个简单的表情包组件
  16. JEP 379:将低暂停时间的垃圾收集器Shenandoah推向生产
  17. 头歌-软件测试技术-面向对象测试_王铁军
  18. DEM数字高程模型、DSM数字地表模型和DOM正射影像的区别联系
  19. 1-2 用Python爬取猫眼票房网上的电影票房信息
  20. 华清远见重庆分中心——前端阶段技术个人总结

热门文章

  1. 语音转文字 Privacy Policy
  2. cygwin和mingw的比较
  3. C语言编码转换----负数的二进制表示方法
  4. 【转】西门子数控系统中MMC、PCU、NCU、CCU简略介绍
  5. STM32_基础篇(1)学习资料准备
  6. Hibernate实战——双向N-N关联
  7. ML笔记1——什么是ML;回归LossFunction(LF)推导;LF与凸函数关系;梯度下降推导;范数与正则化。
  8. 谷歌搜索结果在新标签页中打开
  9. endnote 教程
  10. 怎么让计算机休眠的时候不断网,Windows10系统如何让电脑睡眠状态也不断网?