【华为OD笔试真题JAVA实现】幼儿园找出同班的小朋友
题目:
幼儿园两个班的小朋友排队时混在了一起,每个小朋友都知道自己跟前面一个小朋友是不是同班,
请你帮忙把同班的小朋友找出来。
小朋友的编号为整数,与前面一个小朋友同班用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实现】幼儿园找出同班的小朋友相关推荐
- 华为od机考题目-幼儿园找出同班的小朋友(幼儿园分班)
幼儿园两个半的小朋哟排队的时候混合在一起了,每位小朋友都直到自己是否与前面的一位小朋友同伴,请你帮忙把同班的小朋友找出来 小朋友的编号是整数,与前一位同班用Y表示,不同班用N表示 准备两个列表分别保存 ...
- 【100%通过率】华为OD机试真题 Java 实现【找出重复代码】【2022.11 Q4 新题】
所有题目均有五种语言实现.C实现目录.C++ 实现目录.Python实现目录.Java实现目录.JavaScript实现目录
- 【华为OD面试真题 JAVA】根据访问日志统计日活和月活
题目描述 给定一个日志系统,输出n条日志: 日志格式分为几部分,说明如下: 1: 日期yyyy-mm-dd,保证日期都在一个月内 2: ip:.分格式,保证为合法ip(1.1.1.1和1.001.01 ...
- 【满分】【华为OD机试真题2023 JAVAJS】找出通过车辆最多颜色
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 找出通过车辆最多颜色 知识点滑窗 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 在一个狭小的路口,每秒只能通过一辆车, ...
- 【华为机试真题 Python实现】寻找身高相近的小朋友
文章目录 前言 题目描述 示例 1 参考代码 前言 <华为机试真题>专栏含牛客网华为专栏.华为面经试题.华为OD机试真题. 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您 ...
- 【华为机试真题Java】从入门到入职-真题列表导读
写在前面 本专栏有100+道题(持续更新中),都是往期的HW机试真题,根据过往同学的经验基本都会考到原题.大家有什么不懂的都可以留言. 华为机试有三道题目,第一道和第二道属于简单或中等题,分值为100 ...
- 华为软件测试笔试真题之变态逻辑推理题
现在很多公司面试,都要求做笔试题.其中有软件测试的基本知识考察,也有不少逻辑推理题,不知道大家有没有遇到过,小编盆友之前面试华为过程中是有幸遇到了,今天整理了几道与大家一起分享下. 第一题 题目: 有 ...
- 【华为OD考试真题】报数游戏(Python实现)
前言: 考试题目大同小异,练习真题是通过考试的捷径,思路仅供参考,如果有更好的思路,欢迎一起交流学习,创作不易,文章若对你有帮助,点个关注,谢谢题目描述 100个人围成一圈,每个人有一个编码,编号从1 ...
- 【华为机试真题 JAVA】分班问题-100
[编程题目 |100分] 分班问题[2021 H2, 2022 Q1,Q2 考试题] 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++262144K,其他语言524288K 64bit ...
最新文章
- css字体相关样式的处理
- 【译】理解 JavaScript 中函数调用和 this
- socket传输过程
- php包含文件时显示空白页,php中出现空白页的原因及解决方法汇总_php技巧
- mysql杨辉三角_实现杨辉三角
- odoo 自定义视图_如何使用Windows的五个模板自定义文件夹视图
- 架构 | 聊聊我心中的架构设计观
- k8s的ingress使用
- mysql 建立索引的例子_mysql建立合适的索引的例子
- 安装指定版本的GPU版本的tensorflow小技巧
- linux ss命令查看端口监听情况
- 手把手教你做一个简单的VB数据库程序
- visio_连接线样式设置:如箭头线
- android打开超链接屏幕太小,手机屏幕太小,教你2种方法投屏到电脑上,小白也能轻松搞定!...
- vue实现一个简单的表情包组件
- JEP 379:将低暂停时间的垃圾收集器Shenandoah推向生产
- 头歌-软件测试技术-面向对象测试_王铁军
- DEM数字高程模型、DSM数字地表模型和DOM正射影像的区别联系
- 1-2 用Python爬取猫眼票房网上的电影票房信息
- 华清远见重庆分中心——前端阶段技术个人总结