当前位置: 首页 > news >正文

华为OD机试 - 学生排名(Java 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?

二、输入描述

第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10

第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文字母构成,单个长度不超过10个字符。科目的出现顺序和后续输入的学生成绩一一对应。不会出现重复的科目名称。

第3行开始的n行,每行包含一个学生的姓名和该生m个科目的成绩(空格隔开),学生不会重名。学生姓名只由英文字母构成,长度不超过10个字符。成绩是0~100的整数,依次对应第2行中输入的科目。

第n+2行,输入用作排名的科目名称。若科目不存在,则按总分进行排序。

三、输出描述

输出一行,按成绩排序后的学生名字,空格隔开。成绩相同的按照学生姓名字典顺序排序。

1、输入

3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 100 82
shuxue

2、输出

xiaohua fangfang minmin

3、说明

按shuxue成绩排名,依次是xiaohua、fangfang、minmin

四、解题思路

给定学生人数和科目数量,以及每个学生的姓名、各科成绩。要求按照指定科目或总分对学生进行排名,并输出排名结果。

解题思路:

  1. 解析输入,读取学生人数、科目数量、科目名称和学生成绩。
  2. 根据输入的科目名称或总分对学生进行排序。
  3. 输出排序后的学生名单,如果成绩相同,则按照学生姓名的字典顺序排序。

五、Java算法源码

public class OdTest01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 学生人数int m = scanner.nextInt(); // 科目数量scanner.nextLine(); // 读取换行String[] subjects = scanner.nextLine().split(" "); // 科目名称数组Map<String, Integer> subjectIndexMap = new HashMap<>(); // 科目名称到索引的映射for (int i = 0; i < m; i++) {subjectIndexMap.put(subjects[i], i);}List<Student> students = new ArrayList<>();for (int i = 0; i < n; i++) {String[] studentInfo = scanner.nextLine().split(" ");String name = studentInfo[0];Map<String, Integer> scores = new HashMap<>();for (int j = 0; j < m; j++) {scores.put(subjects[j], Integer.parseInt(studentInfo[j + 1]));}students.add(new Student(name, scores));}String sortBySubject = scanner.nextLine(); // 排序依据的科目名称// 根据排序依据对学生进行排序students.sort((s1, s2) -> {int score1, score2;if (subjectIndexMap.containsKey(sortBySubject)) {score1 = s1.scores.getOrDefault(sortBySubject, 0);score2 = s2.scores.getOrDefault(sortBySubject, 0);} else {score1 = s1.getTotalScore();score2 = s2.getTotalScore();}if (score1 != score2) {return Integer.compare(score2, score1); // 按成绩降序排序} else {return s1.getName().compareTo(s2.getName()); // 成绩相同按姓名字典顺序排序}});// 输出排序后的学生名单for (Student student : students) {System.out.print(student.getName() + " ");}}
}class Student {String name;Map<String, Integer> scores;public Student(String name, Map<String, Integer> scores) {this.name = name;this.scores = scores;}public String getName() {return name;}public int getTotalScore() {int total = 0;for (int score : scores.values()) {total += score;}return total;}
}

六、效果展示

1、输入

3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 90 95
zongfen

2、输出

fangfang minmin xiaohua

3、说明

排序科目不存在,按总分排序,fangfang和minmin总分相同,按姓名的字典顺序,fangfang排在前面。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.mrgr.cn/news/68100.html

相关文章:

  • Java学习教程,从入门到精通,Java 构造方法语法的知识点总结(22)
  • 【计算机网络】TCP协议面试常考(一)
  • Java学习路线:Maven(二)scope、optional和exclusions
  • 初学Java基础Day22---枚举
  • display:none后没有过度动画,transition未生效
  • 22.04Ubuntu---ROS2使用rclcpp编写节点
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • move_base
  • D365 无法在数据被选择或插入到另一个事务作用域中的缓冲区上调用 NEXT、update() 或 delete()
  • Visual Studio Code从安装到正常使用
  • 在鱼皮的模拟面试里面学习有感
  • 代码中的设计模式-策略模式
  • LLMs之RAG:《LightRAG: Simple and Fast Retrieval-Augmented Generation》翻译与解读
  • MDC(重要)
  • 06 网络编程基础
  • STM32Cube高效开发教程<高级篇><FreeRTOS>(十二)-----互斥量使用例程
  • YoloV10改进策略:上采样改进|CARAFE,轻量级上采样|即插即用|附改进方法+代码
  • OpenResty 1.27.1.1 已经正式发布
  • 市场营销应该怎么学?
  • 人工智能将如何塑造下一代网络威胁
  • RabbitMQ 高级特性——消息分发
  • 异常(JAVA笔记第三十二期 )
  • 232转485模块测试
  • lua入门教程:数字
  • VisionPro —— CogIPOneImgeTool工具详解
  • Yetu野兔-私域运营工具