• Java 华为真题-选修课


    需求:

         现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序

    输入描述

            第一行为第一门选修课学生的成绩

            第二行为第二门选修课学生的成绩,每行数据中学生之间以英文分号分隔,每个学生的学号和成绩以英文逗号分隔,学生学号的格式为8位数字(2位院系编号+入学年份后2位+院系内部1位专业编号+所在班级3位学号),学生成绩的取值范围为[0,100]之间的整数,两门选修课选修学生数的取值范围为[1-2000]之间的整数。

    输出描述

            同时选修了两门选修课的学生的学号,如果没有同时选修两门选修课的学生输出NULL,否则,先按照班级划分,班级编号小的先输出,每个班级先输出班级编号(学号前五位),然后另起一行输出这个班级同时选修两门选修课的学生学号,学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序),学生之间以英文分号分隔。

    输入:

    01202021,75;01201033,95;01202008,80;01203006,90;01203088,100

    01202008,70;01203088,85;01202111,80;01202021,75;01201100,88

    输出:

    01202

    01202008;01202021

    01203

    01203088

    编码:

    1. ublic class SelectCourse {
    2. public static void main(String[] args) {
    3. Scanner scanner = new Scanner(System.in);
    4. //输入字符串数据
    5. String[] strs_1 = scanner.nextLine().split(";");
    6. String[] strs_2 = scanner.nextLine().split(";");
    7. //集合
    8. List list1 = parseData(strs_1);
    9. List list2 = parseData(strs_2);
    10. //集合
    11. Set sets = new HashSet<>();
    12. //调用方法
    13. List list =sameCourse(list1,list2,sets);
    14. //sets排序,转换成List
    15. List my =new ArrayList<>(sets);
    16. Collections.sort(my);
    17. //调用排序方法
    18. getComparator(list,my);
    19. }
    20. /**
    21. * 1.获取学生信息
    22. *
    23. * @param strs
    24. * @return
    25. */
    26. private static List parseData(String[] strs) {
    27. List list = new ArrayList<>();
    28. //循环
    29. for (int i = 0; i < strs.length; i++) {
    30. //分割字符串
    31. String[] ss = strs[i].split(",");
    32. //将对象添加集合中
    33. list.add(new Students(ss[0], Integer.parseInt(ss[1])));
    34. }
    35. return list;
    36. }
    37. /**
    38. * (2) 统计同时选修两门选修课的学生信息
    39. * @param list1 第一门选修课学生的成绩
    40. * @param list2 第二门选修课学生的成绩
    41. * @param sets 学号前五位
    42. * @return
    43. */
    44. public static List sameCourse(List list1, List list2, Set sets) {
    45. List list = new ArrayList<>();
    46. //循环比较
    47. for (Students stu1 :
    48. list1) {
    49. for (Students stu2 :
    50. list2) {
    51. //判断学号是否相同
    52. if (stu1.getNo().equals(stu2.getNo())) {
    53. //累计成绩和
    54. int sum = stu1.getScore() + stu2.getScore();
    55. //添加到集合中
    56. list.add(new Students(stu1.getNo(), sum));
    57. //截取学号前五位-存入set集合中,过滤重复的
    58. String strNo = stu1.getNo().substring(0, 5);
    59. sets.add(strNo);
    60. }
    61. }
    62. }
    63. //判断如果没有,则返回NULL
    64. if (list.size() == 0) {
    65. System.out.println("NULL");
    66. }
    67. return list;
    68. }
    69. /**
    70. * (3) 学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序
    71. * @param list
    72. * @param sets
    73. */
    74. public static void getComparator(List list,List sets){
    75. //外部排序
    76. Collections.sort(list,new Comparator(){
    77. @Override
    78. public int compare(Students o1, Students o2) {
    79. //升序
    80. return Integer.valueOf(o1.getNo())-Integer.valueOf(o2.getNo());
    81. }
    82. });
    83. //输出信息
    84. for (String str:
    85. sets) {
    86. System.out.println(str);
    87. //对象
    88. StringBuilder builder=new StringBuilder();
    89. //循环
    90. for (Students lls:
    91. list) {
    92. //是否相等
    93. if(str.equals(lls.getNo().substring(0,5))){
    94. builder.append(lls.getNo()).append(";"); //添加
    95. }
    96. }
    97. System.out.println(builder.toString());
    98. }
    99. }
    100. }
    101. //学生类
    102. class Students {
    103. private String no;
    104. private int score;
    105. .....setXXX and getXXX......
    106. public Students(String no, int score) {
    107. this.no = no;
    108. this.score = score;
    109. }
    110. @Override
    111. public String toString() {
    112. return no + "=>" + score;
    113. }
    114. }

    效果:

     

  • 相关阅读:
    Leetcode---361周赛
    Flink Batch Hash Aggregate
    Apifox--比 Postman 还好用的 API 测试工具
    C++异常及异常优缺点
    百度智能云发布AI原生应用工作台,为大模型落地五类需求提供最优
    【16】c++11新特性 —>独占智能指针unique_ptr
    springboot实现转发和重定向
    面试总结-2023届安全面试题总汇
    uni-app tree(树状) 组件
    电力能源指挥中心调度台解决方案主要关注的问题
  • 原文地址:https://blog.csdn.net/hlx20080808/article/details/132871405