【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 智能成绩表(100分) - 三语言AC题解(Python/Java/Cpp)

news2024/12/24 2:33:50

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

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

💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

智能成绩表(100分)

🌍 评测功能需要 订阅专栏 后私信联系清隆解锁~

🍓OJ题目截图

在这里插入图片描述

文章目录

    • 📎在线评测链接
    • 🍓OJ题目截图
    • 🌲 智能成绩表
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 样例输入
      • 样例输出
      • 数据范围
      • 题解
      • 参考代码

🌲 智能成绩表

问题描述

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

输入格式

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

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

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

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

输出格式

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

样例输入

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

数据范围

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

题解

本题需要我们实现一个学生成绩管理系统,根据输入的学生信息和排序科目,输出按要求排序后的学生姓名。

首先,我们可以定义一个 Student 类来表示学生,包含学生姓名和一个排名要素列表。排名要素列表中,前 m m m 个元素对应 m m m 个科目的成绩,最后一个元素表示总分。

然后,我们读取输入并初始化学生列表。在读取科目信息时,我们可以用一个字典 subject_rankIdx 来存储科目名称到其在排名要素列表中的序号的映射关系。

接着,我们读取排序科目。如果该科目存在,我们取出其对应的序号 rankIdx,否则使用总分所在的序号 m

最后,我们使用 sort 函数对学生列表进行排序。排序的 key 函数为一个 lambda 表达式,先比较 rank[rankIdx] 的值(降序),再比较学生姓名的字典序。

排序后,我们将学生姓名用空格连接并输出即可。

该方法的时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),主要是排序的复杂度。空间复杂度为 O ( n ) O(n) O(n),需要存储所有学生的信息。

参考代码

  • Python
class Student:
    def __init__(self, name, rank):
        self.name = name
        self.rank = rank

n, m = map(int, input().split())
subject_rankIdx = {}
subjects = input().split()

for i in range(m):
    subject_rankIdx[subjects[i]] = i

students = []
for _ in range(n):
    data = input().split()
    name, scores = data[0], list(map(int, data[1:]))
    rank = scores + [sum(scores)]
    students.append(Student(name, rank))

subject = input()
rankIdx = subject_rankIdx.get(subject, m)

students.sort(key=lambda x: (-x.rank[rankIdx], x.name))
print(" ".join(stu.name for stu in students))
  • Java
import java.util.*;

class Student {
    String name;
    int[] rank;

    Student(String name, int[] rank) {
        this.name = name;
        this.rank = rank;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt(), m = sc.nextInt();
        sc.nextLine(); // 消耗换行符

        Map<String, Integer> subjectRankIdx = new HashMap<>();
        String[] subjects = sc.nextLine().split(" ");
        for (int i = 0; i < m; i++) {
            subjectRankIdx.put(subjects[i], i);
        }

        List<Student> students = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String[] data = sc.nextLine().split(" ");
            String name = data[0];
            int[] scores = new int[m];
            for (int j = 0; j < m; j++) {
                scores[j] = Integer.parseInt(data[j + 1]);
            }
            int total = Arrays.stream(scores).sum();
            int[] rank = Arrays.copyOf(scores, m + 1);
            rank[m] = total;
            students.add(new Student(name, rank));
        }

        String subject = sc.nextLine();
        int rankIdx = subjectRankIdx.getOrDefault(subject, m);

        students.sort((a, b) -> {
            if (b.rank[rankIdx] != a.rank[rankIdx]) {
                return b.rank[rankIdx] - a.rank[rankIdx];
            } else {
                return a.name.compareTo(b.name);
            }
        });

        List<String> names = students.stream().map(stu -> stu.name).toList();
        System.out.println(String.join(" ", names));
    }
}
  • Cpp
#include <iostream>
#include <sstream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;

struct Student {
    string name;
    vector<int> rank;

    Student(string name, vector<int> rank) : name(name), rank(rank) {}
};

int main() {
    int n, m;
    cin >> n >> m;
    cin.ignore();

    unordered_map<string, int> subjectRankIdx;
    string subjects;
    getline(cin, subjects);
    stringstream ss(subjects);
    string subject;
    for (int i = 0; i < m; i++) {
        ss >> subject;
        subjectRankIdx[subject] = i;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1836080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高等数学笔记(二):极限

一、数列极限的定义 以下符号表示 “对于任意给定的” 以下符号表示 “存在” 以下符号表示 “如果什么&#xff08;箭头左&#xff09;&#xff0c;则什么&#xff08;箭头右&#xff09;” 二、收敛数列的性质 2.1 唯一性 2.2 有界性 2.3 保号性 2.4 子数列收敛性 三、函数…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第43课-玩家形象优化-使用导入的3D模型文件

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第43课-玩家形象优化-使用导入的3D模型文件 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScri…

计算机丢失MSVCP140.dll的一键修复方案,快速解决dll问题

电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;在使用电脑的过程中&#xff0c;有时会遇到一些错误提示&#xff0c;其中之一就是“丢失msvcp140.dll”。那么&#xff0c;这个错误提示到底是怎么回事呢&#xff1f;小编将从多个方面进行详细描述&#xff0c;帮助大…

实验室装修公司教你在实验室装修设计中要注意哪些细节

实验室装修设计是一项高度专业化的工作&#xff0c;涉及到空间布局、材料选择、家具配置、施工质量和验收标准等多个方面。一个成功的实验室装修项目&#xff0c;不仅要满足实验操作的需求&#xff0c;还要确保人员的安全和舒适。以下是广州实验室装修公司小编分享的在实验室装…

设计模式-结构型-06-桥接模式

1、传统方式解决手机操作问题 现在对不同手机类型的不同品牌实现操作编程&#xff08;比如&#xff1a;开机、关机、上网&#xff0c;打电话等&#xff09;&#xff0c;如图&#xff1a; UML 类图 问题分析 扩展性问题&#xff08;类爆炸&#xff09;&#xff1a;如果我们再…

银行数仓项目实战(三)--使用Kettle进行增量,全量抽取

文章目录 使用Kettle进行全量抽取使用Kettle进行增量抽取 使用Kettle进行全量抽取 一般只有项目初始化的时候会使用到全量抽取&#xff0c;全量抽取的效率慢&#xff0c;抽取的数据量大。 我们在第一次进行全量抽取的时候&#xff0c;要在表中新建一个字段记录抽取时间&#x…

CLIP: Learning Transferable Visual Models From Natural Language Supervision

1、引言 论文链接&#xff1a;ReadPaper 现在最先进的计算机视觉系统都是训练模型来预测一组固定的、预定义好的目标类别&#xff08;如 ImageNet 的 1000 类和 COCO 的 80 类&#xff09;。这种受限制的监督形式限制了它们的通用性和可用性&#xff0c;因为需要额外的标记数据…

【第18章】Vue实战篇之登录界面

文章目录 前言一、数据绑定1. 数据绑定2. 数据清空 二、表单校验1. 代码2. 展示 三、登录1.登录按钮2.user.js3. login 四、展示总结 前言 上一章完成用户注册&#xff0c;这一章主要做用户登录。 一、数据绑定 登录和注册使用相同的数据绑定 1. 数据绑定 <!-- 登录表单 -…

Unity制作透明材质直接方法——6.15山大软院项目实训

之前没有在unity里面接触过材质的问题&#xff0c;一般都是在maya或这是其他建模软件里面直接得到编辑好材质的模型&#xff0c;然后将他导入Unity里面&#xff0c;然后现在碰到了需要自己在Unity制作透明材质的情况&#xff0c;所以先搜索了一下有没有现成的方法&#xff0c;很…

ECharts 词云图案例二:创意蒙版应用

ECharts 词云图案例二&#xff1a;创意蒙版应用 引言 在数据可视化领域&#xff0c;ECharts 以其强大的功能性和灵活性&#xff0c;成为开发者和设计师的首选工具之一。继上一篇关于 ECharts 词云图的详细介绍后&#xff0c;本文将探索词云图的进阶应用——使用蒙版来创造更具…

VS+QT+OCC创建坐标界面

1、安装并配置好项目后&#xff0c;填写如下代码&#xff1a; #pragma once#include <Standard_Handle.hxx> #include <V3d_Viewer.hxx> #include <OpenGl_GraphicDriver.hxx> #include <WNT_Window.hxx> #include <V3d_View.hxx> #include <…

C++ 72 之 友元和类模版

#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <string>// 写法2&#xff1a; // template<class T1, class T2> // class Students12;// 要提前用到Students12&#xff0c;需要在前面先让编译器见过Students12才可…

【C语言】回调函数 和 部分库函数的用法以及模拟实现

一、回调函数&#xff1a; 1、定义&#xff1a; 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其所指向的函数时&#xff0c;我们就说这是回调函数。 2、qsort的模拟实现…

高效、智能、安全:小型机房EasyCVR+AI视频综合监控解决方案

一、背景需求分析 随着信息技术的迅猛发展&#xff0c;小型机房在企事业单位中扮演着越来越重要的角色。为了确保机房的安全稳定运行&#xff0c;远程监控成为了必不可少的手段。 二、视频监控 视频监控是机房远程监控的重要组成部分。通过安装IP摄像机及部署视频监控系统Ea…

【Linux】基础IO——理解文件系统

1.理解文件系统 1.1.ls与stat 磁盘文件由两部分构成&#xff0c;分别是文件内容和文件属性。 文件内容就是文件当中存储的数据&#xff0c;文件属性就是文件的一些基本信息&#xff0c; 例如文件名、文件大小以及文件创建时间等信息都是文件属性&#xff0c;文件属性又被称…

android常用知识

透明activity样式&#xff1a; android:theme"android:style/Theme.Translucent.NoTitleBar.Fullscreen"这句代码&#xff0c;当你是建的empty activity project时&#xff0c;默认继承的是AppCompat这个类。所以在AndroidMifext.xml文件中用上述代码会导致程序错误&…

反馈型振荡器

目录 反馈型振荡器分类 基本工作原理 启动过程 “心脏”LC振荡 起振条件 平衡条件 稳定条件 互感耦合振荡器 电感三端LC振荡器 电容三端LC振荡器 串联改进电容三端式振荡器 并联改进电容三端式振荡器 相位平衡条件的判断准则 反馈型振荡器分类 基本工作原理 启动过…

心跳机制讲解及实例

什么是心跳机制 心跳机制出现在tcp长连接中&#xff0c;客户端和服务器之见定时发送一种特殊的数据包通知对方还在线&#xff0c;以确保tcp链接地可靠性&#xff0c;有可能tcp链接由于某些原因(列入网线被拔了&#xff0c;突然断电)导致客户端断了&#xff0c;但是服务器不知道…

使用高斯混合模型(GMM)进行猫狗音频聚类(Kaggle Audio Cats and Dogs)

Audio Cats and Dogs | Kaggle 目录 一、实验目标 二、数据分析 三、实验结果 四、改进方向 一、实验目标 数据集包括164个标注为猫的.wav文件&#xff0c;总共1323秒和113个标注为狗叫声的.wav文件&#xff0c;总共598秒&#xff0c;要求判别每个音频是狗叫还是猫叫 二、…

Springboot + Mybatis 实现sql打印

参照这个视频&#xff1a;https://www.bilibili.com/video/BV1MS411N7mn/?vd_source90ebeef3261cec486646b6583e9f45f5 实现mybatis对外暴露的接口Interceptor 使用Intercepts接口,这里的写法参照mybatis-plus中的拦截器写法 Intercepts({Signature(type Executor.class, m…