【最新华为OD机试E卷】智能成绩表(100分)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员

💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历

✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解

🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码

👏 感谢大家的订阅➕ 和 喜欢💗 和手里的小花花🌸

最新华为OD机试E卷全、新、准,题目覆盖率达 95% 以上,其中D卷题目全部支持在线评测,E卷题目正在持续上线中~

最新华为OD机试专栏: https://www.nowcoder.com/creation/manager/columnDetail/MgbyJj

🎀关于华为OD

  • ✨华为OD的概念 华为的大部分社会招聘采用了被称为OD(Outsourcing Dispatch)模式,这是一种与德科共同进行的招聘方式。在这种模式下,被招聘的员工通常被定级在13至17级,这些员工被视为华为的储备人才。华为每年会从这些OD项目中选拔表现出色的员工,并将他们转为正式员工。
  • ⌚️华为 OD 应聘流程
    • 第一步:投递简历

      • 提供姓名、邮箱、手机号、身份证号,用于锁定,所以投递前需要考虑清楚,投到项目组之后,一般不会转给另一个项目的 HR 了,也就是被锁定。
    • 第二步:机试

      • 3 道算法题,400 分满分,一般 1 个月的准备时间,华为机试必须要 150 分以上,没有过半年之后才能参加下一次考试。
    • 第三步:技术面

      • 2 轮技术面试。
    • 第四步:HR 与主管面试

    • 第五步:录用,发 offer

alt

🍓OJ题目截图

alt

🎁 智能成绩表

问题描述

K小姐是一位教师,她需要一个学生成绩管理系统来帮助她对学生的考试成绩进行排名。系统需要支持按照总分或者单科成绩进行排序。你能帮帮她吗?

输入格式

第一行包含两个正整数 ,分别表示学生人数和科目数量。()

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

接下来的 行,每行包含一个学生的姓名和该生 个科目的成绩(空格隔开)。学生姓名只由英文字母构成,长度不超过 个字符。成绩是 的整数,依次对应第二行输入的科目。

最后一行输入一个字符串,表示用作排名的科目名称。若该科目不存在,则按总分进行排序。

输出格式

输出一行,表示按成绩排序后的学生姓名,用空格隔开。如果有成绩相同的情况,则按照学生姓名的字典序进行排序。

样例输入

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

样例输出

xiaohua fangfang minmin

样例输入

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

样例输出

fangfang minmin xiaohua

数据范围

  • 科目名称和学生姓名均只由英文字母构成,长度不超过 个字符。
  • 成绩是 的整数。

题解

自定义排序

在这个问题中,需要实现一个简单的学生成绩管理系统。首先,要读取输入的信息,包括学生人数、科目数量、各个科目的名称以及每个学生的姓名和对应的成绩。根据用户指定的科目进行排序,如果指定的科目不存在,则按总分进行排序。

解决思路:

  1. 数据存储:我们可以使用一个列表来存储每个学生的信息,包括他们的姓名和各个科目的成绩。

  2. 计算总分:在对学生进行排序之前,我们需要计算每个学生的总分,以便在需要时使用。

  3. 排序逻辑:我们可以使用 Python 的内置排序功能,根据指定的科目或总分对学生进行排序。如果有多个学生的成绩相同,则按姓名字典序进行排序。

参考代码

# 引入所需模块
from typing import List, Tuple

def rank_students(n: int, m: int, subjects: List[str], scores: List[Tuple[str, List[int]]], rank_subject: str) -> List[str]:
    # 创建一个字典以存储每个科目的索引
    subject_index = {subject: index for index, subject in enumerate(subjects)}
    
    # 如果指定的排名科目不存在,则使用总分进行排名
    if rank_subject not in subject_index:
        # 按照总分计算并排序
        sorted_students = sorted(scores, key=lambda x: (-sum(x[1]), x[0]))
    else:
        # 获取指定科目的索引
        subject_idx = subject_index[rank_subject]
        # 按照指定科目的成绩进行排序
        sorted_students = sorted(scores, key=lambda x: (-x[1][subject_idx], x[0]))

    # 提取排序后的学生姓名并返回
    return [student[0] for student in sorted_students]

# 示例输入处理与输出展示
if __name__ == "__main__":
    n, m = map(int, input().split())
    subjects = input().split()
    
    scores = []
    for _ in range(n):
        data = input().split()
        name = data[0]
        grades = list(map(int, data[1:m+1]))
        scores.append((name, grades))
    
    rank_subject = input().strip()
    
    # 调用函数并打印结果
    result = rank_students(n, m, subjects, scores, rank_subject)
    print(" ".join(result))
  • Python
# 引入所需模块
from typing import List, Tuple

def rank_students(n: int, m: int, subjects: List[str], scores: List[Tuple[str, List[int]]], rank_subject: str) -> List[str]:
    # 创建一个字典以存储每个科目的索引
    subject_index = {subject: index for index, subject in enumerate(subjects)}
    
    # 如果指定的排名科目不存在,则使用总分进行排名
    if rank_subject not in subject_index:
        # 按照总分计算并排序
        sorted_students = sorted(scores, key=lambda x: (-sum(x[1]), x[0]))
    else:
        # 获取指定科目的索引
        subject_idx = subject_index[rank_subject]
        # 按照指定科目的成绩进行排序
        sorted_students = sorted(scores, key=lambda x: (-x[1][subject_idx], x[0]))

    # 提取排序后的学生姓名并返回
    return [student[0] for student in sorted_students]

# 示例输入处理与输出展示
if __name__ == "__main__":
    n, m = map(int, input().split())
    subjects = input().split()
    
    scores = []
    for _ in range(n):
        data = input().split()
        name = data[0]
        grades = list(map(int, data[1:m+1]))
        scores.append((name, grades))
    
    rank_subject = input().strip()
    
    # 调用函数并打印结果
    result = rank_students(n, m, subjects, scores, rank_subject)
    print(" ".join(result))
  • C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_N 100
#define MAX_M 10
#define MAX_NAME_LEN 11

// 学生结构体
typedef struct {
    char name[MAX_NAME_LEN];
    int *scores;  // 动态分配的分数数组
} Student;

// 全局变量,用于排序比较
int rank_index;
int subject_count;

// 比较函数,用于qsort
int compare(const void *a, const void *b) {
    const Student *studentA = *(const Student **)a;
    const Student *studentB = *(const Student **)b;

    if (studentA->scores[rank_index] != studentB->scores[rank_index]) {
        return studentB->scores[rank_index] - studentA->scores[rank_index];
    }
    return strcmp(stud

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

最新华为OD机试-E+D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-E/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 部分题目提供OJ在线评测

全部评论

相关推荐

点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务