• Java 华为真题-小朋友分班


    需求: 

    题目描述

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

    输入描述

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

    输出描述

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

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

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

    输入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. public class TestClass {
    2. public static void main(String[] args) {
    3. //1/N 2/Y 3/N 4/Y
    4. //6/N 2/Y 3/N 4/Y 5/Y 7/N 8/Y
    5. Scanner scanner = new Scanner(System.in);
    6. System.out.print("输入小朋友的编号:");
    7. String str = scanner.nextLine();
    8. // System.out.println(str);
    9. String[] childrens = str.split(" ");
    10. // System.out.println(Arrays.toString(childrens));
    11. //创建双端队列对象
    12. ArrayDeque arr_one = new ArrayDeque<>();
    13. ArrayDeque arr_two = new ArrayDeque<>();
    14. //调用方法
    15. getBranch(childrens, arr_one, arr_two);
    16. show(arr_one);
    17. show(arr_two);
    18. }
    19. /**
    20. * 显示数据
    21. *
    22. * @param arr
    23. */
    24. private static void show(ArrayDeque arr) {
    25. //使用Lambda,分割之后,再进行排序。
    26. System.out.println(arr.stream().map(s -> s.split("/")[0]).sorted().collect(Collectors.joining(" ")).trim());
    27. }
    28. /**
    29. * 分班
    30. * @param childrens
    31. * @param arr1
    32. * @param arr2
    33. */
    34. private static void getBranch(String[] childrens, ArrayDeque arr1, ArrayDeque arr2) {
    35. ArrayDeque temp = null;
    36. //循环
    37. for (String chs :
    38. childrens) {
    39. //判断当前对象是否为空
    40. if (Objects.isNull(temp)) {
    41. temp = arr1; //给当前队列赋值
    42. } else if (chs.endsWith("N")) { //判断尾端是否为N
    43. temp = temp.equals(arr1) ? (arr2) : (arr1);
    44. }
    45. //添加到最后
    46. temp.offerLast(chs);
    47. }
    48. }
    49. }

    效果: 

     

  • 相关阅读:
    配置与管理Samba服务器复习题
    应用层协议——DNS、DHCP、HTTP、FTP
    图片上传~
    python机器学习 一元线性回归 梯度下降法的实现 【Python机器学习系列(四)】
    解决报错 java.lang.IllegalArgumentException: Cannot format given Object as a Date
    焱融看 | 混合云时代下,如何制定多云策略
    2. 两数相加
    日志输出-查看 SQL:深入分析 MyBatis 执行过程
    浅析即时通讯开发前置 HTTP SSO 单点登陆接口的原理
    手把手教你做多重线性逐步回归
  • 原文地址:https://blog.csdn.net/hlx20080808/article/details/133682667