华为OD机试统一考试D卷C卷 - 学生排名/智能成绩表
题目描述
小明来到学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?
输入描述
第 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 98 minmin 100 82 shuxue
输出
xiaohua fangfang minmin
说明:
按照shuxue成绩排名依次是 xiaohua fangfang minmin
样例2
输入
3 2 yuwen shuxue fangfang 95 90 xiaohua 88 95 minmin 90 95 zongfen
输出
fangfang minmin xiaohua
说明:
排序科目不存在,按总分排序 , fangfang 和 minmin 总分相同,按姓名的字典序顺序, fangfang 排在前面
Java
import java.util.*; public class Main { // 定义学生类 static class Student { String name; // 学生姓名 int totalScore; // 学生总分 Map<String, Integer> scores; // 存储学生各科成绩的映射 // 构造函数,初始化学生姓名、成绩映射和总分 Student(String name) { this.name = name; this.scores = new HashMap<>(); this.totalScore = 0; } // 添加成绩的方法,同时累加到总分 void addScore(String subject, int score) {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
机试E卷D卷刷题日记 文章被收录于专栏
机试刷题记录