【华为OD题库-005】选修课-Java

2023-11-05 04:52
文章标签 java 华为 题库 005 od 选修课

本文主要是介绍【华为OD题库-005】选修课-Java,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的降序排序,成绩相同时按照学生的学号升序排序。
输入描述
第一行为第—门选修课学生的成绩
第二行为第二门选修课学生的成绩,
每行数据中学生之间以英文分号分隔,每个学生的学号和成绩以英文逗号分隔,学生学号的格式为8位数字(2位院系编号+入学年份后2位+院系内部1位专业编号+所在班级3位学号),学生成绩的取值范围为[0,100]之间的整数,两门选修课选修学生数的取值范围为[1-2000]之间的整数。
输出描述
同时选修了两门选修课的学生的学号,如果没有同时选修两门选修课的学生输出NULL,否则,先按照班级划分,班级编号小的先输出,每个班级先输出班级编号(学号前五位),然后另起一行输出这个班级同时选修两门选修课的学生学号,学号按照要求排序(按照两门选修课成绩和的降序,成绩和相同时按照学号升序),学生之间以英文分号分隔。
示例1
输入:
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
说明:
同时选修了两门选修课的学生01202021、01202008、01203088,这三个学生两门选修课的成绩和分别为150、150、185。01202021、01202008属于01202班的学生,按照成绩和降序,成绩相同时按学号升序输出的结果为:01202008:01202021;01203088属于01203班的学生,按照成绩和降序,成绩相同时按学号升序输出的结果为01203088,01202的班级编号小于01203的班级编号,需要先输出。
示例2
输入:
01201022,75;01202033,95;01202018,80;01203006,90;01202066,100
01202008,70;01203102,85;01202111,80;01201021,75;01201100,88
输出:
NULL
说明:
没有同时选修了两门选修课的学生,输出NULL。

思路

题目描述多,实际很简单。
用两个list分别记录两门课程对应的学生编号,两个list相交的部分就能得到“同时选修了两门选修课的学生的学号”。
关键在于排序,题目要求:先按班级升序,再按成绩降序,最后按学号升序排。班级和学号都可以从学生编号中提取,此处的成绩指的两门课的总成绩,所以可以使用一个map来根据学号查询总成绩。

题解

package hwod;import java.util.*;public class ElectiveCourse {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Map<String, Integer> map = new HashMap<>(); //key为学号,value为总分List<String> firstIds = new ArrayList<>();List<String> secondIds = new ArrayList<>();for (int i = 0; i < 2; i++) {String line = sc.nextLine();for (String item : line.split(";")) {String sid = item.split(",")[0];String score = item.split(",")[1];map.put(sid, map.getOrDefault(sid, 0) + Integer.valueOf(score));if (i == 0) firstIds.add(sid);else secondIds.add(sid);}}List<String> out_ids = new ArrayList<>(); //同时选修了两门课程的学生学号for (int i = 0; i < firstIds.size(); i++) {if (secondIds.contains(firstIds.get(i))) {out_ids.add(firstIds.get(i));}}if (out_ids.size() == 0) {System.out.println("NULL");return;}//学号按照班级,成绩,学号排序Collections.sort(out_ids, (A, B) -> {if (!A.substring(0, 5).equals(B.substring(0, 5))) {return A.substring(0, 5).compareTo(B.substring(0, 5));}if (!map.get(A).equals(map.get(B))) {return -map.get(A).compareTo(map.get(B));}return A.compareTo(B);});//打印输出String classid = null;for (int i = 0; i < out_ids.size(); i++) {boolean isNewClass = false;if (classid == null || !classid.equals(out_ids.get(i).substring(0, 5))) {classid = out_ids.get(i).substring(0, 5);if(i!=0) System.out.println();System.out.println(classid);isNewClass = true;}if (isNewClass) System.out.print(out_ids.get(i));else System.out.print(";" + out_ids.get(i));}}}

这篇关于【华为OD题库-005】选修课-Java的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347546

相关文章

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用