当前位置: 首页 > 面试经验 >

2024华为OD机试真题 - 智能成绩表 JAVA代码

优质
小牛编辑
80浏览
2024-08-14

2024华为OD机试真题 - 智能成绩表 JAVA代码

2024华为OD机试真题,代码包含语言java 代码基本都有详细注释。

题目描述

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

输入描述

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

  • 0 < n < 100
  • 0 < m < 10

第 2 行输入 m 个科目名称,彼此之间用空格隔开。

  • 科目名称只由英文字母构成,单个长度不超过10个字符。
  • 科目的出现顺序和后续输入的学生成绩一一对应。
  • 不会出现重复的科目名称。

第 3 行开始的 n 行,每行包含一个学生的姓名和该生 m 个科目的成绩(空格隔开)

  • 学生不会重名。
  • 学生姓名只由英文字母构成,长度不超过10个字符。
  • 成绩是0~100的整数,依次对应第2行种输入的科目。

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

输出描述

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

用例

输入

3 2

yuwen shuxue

fangfang 95 90

xiaohua 88 95

minmin 100 82

shuxue

输出

xiaohua fangfang minmin

说明

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

输入

3 2

yuwen shuxue

fangfang 95 90

xiaohua 88 95

minmin 90 95

zongfen

输出

fangfang minmin xiaohua

说明

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

声明

上述内容部分整理自考生的真实反馈以及网络资源的搜集,我们始终尊重原作者的权益。如若发现任何内容侵犯了您的版权,敬请及时与我们取得联系,我们将立即进行删除处理。

此外,本材料后续的解析与代码部分均为我方原创思考与分析,凝聚了我们的心血与智慧。我们恳请各位尊重原创,切勿随意搬运或抄袭,共同维护良好的学术与创作环境。谢谢!

订阅后可看完整内容,试看真题如下:

华为OD机试真题 - 剩余银饰的重量 (D卷,100分)

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

题目解析

我们需要理解题目的要求。题目描述了小明作为老师,需要根据学生的考试总分或单科分数对学生进行排名。接下来,我们需要按照题目给定的输入格式和输出要求,逐步进行解题。

  1. 输入处理:读取第一行输入的两个整数 n 和 m,分别代表学生人数和科目数量。读取第二行输入的 m 个科目名称,用于后续成绩对应。接下来读取 n 行,每行包含学生的姓名和对应的 m 个科目成绩。
  2. 数据整理:创建一个数据结构(如列表或字典)来存储每个学生的信息,包括姓名和各科成绩。将读取到的学生信息整理到这个数据结构中,方便后续处理。
  3. 排序:读取最后一行输入的排序科目名称。如果输入的科目名称存在于科目列表中,则按照该科目的成绩对学生进行排序。如果输入的科目名称不存在,则按照学生的总分进行排序。在排序时,如果成绩相同,则按照学生姓名的字典顺序进行排序。
  4. 输出:根据排序后的结果,按照题目要求的格式输出学生的姓名。输出的学生姓名之间用空格隔开。

Java算法源码

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    static class Student {
        String studentName; 
        int[] studentRank; 
        public Student(String studentName, int[] studentRank) {
            this.studentName = studentName;
            this.studentRank = studentRank;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();

        int m = sc.nextInt();

        Map<String, Integer> subjectRankIndexMap = new HashMap<>();
        for (int i = 0; i < m; i++) {
            subjectRankIndexMap.put(sc.next(), i);
        }

        List<Student> students = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String name = sc.next();

            int[] rank = new int[m + 1];
            int scoreSum = 0;

            for (int j = 0; j < m; j++) {
                rank[j] = sc.nextInt();
                scoreSum += rank[j];
            }

            rank[m] = scoreSum;

            students.add(new Student(name, rank));
        }

         int rankIdx = subjectRankIndexMap.getOrDefault(sc.next(), m);

        students.sort(
                (a, b) ->
                        a.studentRank[rankIdx] != b.studentRank[rankIdx]
                                ? b.studentRank[rankIdx] - a.studentRank[rankIdx]
                                : a.studentName.compareTo(b.studentName));

        String result = students.stream()
                .map(student -> student.studentName)
                .collect(Collectors.joining(" "));

        System.out.println(result);
    }
}


#华为od##华为od题库##华为OD##华为OD机试真题##华为#
 类似资料: