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

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

✨ 本系列打算持续跟新华为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 = nameself.rank = rankn, m = map(int, input().split())
subject_rankIdx = {}
subjects = input().split()for i in range(m):subject_rankIdx[subjects[i]] = istudents = []
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.mzph.cn/web/29478.shtml

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

相关文章

Docker MySQL Shutting down mysqld

6月初至6月15日发现MySQL无故停机多次&#xff0c;导致系统无法使用。接下来各种日志查看&#xff0c;排查原因。先附上一份Docker种MySQL的日志的截图。 一、根据Docker的日志初步估计是数据库内存飙升&#xff0c;从而被系统杀掉进程 查询Linux系统日志&#xff0c;在宿主机…

安卓Context上下文

目录 前言一、Context简介二、Application Context2.1 Application Context的创建过程2.2 Application Context的获取过程 三、Activity的Context创建过程四、Service的Context创建过程 前言 Context也就是上下文对象&#xff0c;是Android较为常用的类&#xff0c;但是对于Co…

网络聚合通信测试--自动化测试脚本

一 网络聚合通信测试 以下测试用例为&#xff1a; 整集群测试&#xff0c;每节点进程数从2开始以2的幂次增加至满核心&#xff1b; 测试常见的通信聚合测试8个条目 二 测试前准备 待测节点已完成OS安装及基础配置待测节点已配置完IP&#xff08;若存在IB&#xff0c;则需要配置…

第二十二篇——香农第二定律(一):为什么你的网页总是打不开?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 看似在将知识&#xff0c;实际是在讲生活和所有&#xff1b;突破边界偶尔…

gitlab 获取指定分支下指定路径文件夹的解决方案

第一步&#xff1a; 获取 accessToken 及你的 项目 id &#xff1a; 获取 accessToken ,点击用户头像进入setting 按图示操作&#xff0c;第 3 步 填写你发起请求的域名。 获取项目 id , 简单粗暴方案 进入 你项目仓库页面后 直接 源码搜索 project_id&#xff0c; value 就…

【神经网络】基于CNN(卷积神经网络)构建猫狗分类模型

文章目录 解决问题数据集探索性数据分析数据预处理数据集分割数据预处理 构建模型并训练构建模型训练模型 结果分析与评估模型保存结果预测经验总结 解决问题 针对经典猫狗数据集&#xff0c;基于卷积神经网络&#xff0c;构建猫狗二元分类模型&#xff0c;使用数据集进行参数…

怎么提取视频中的音频?别错过这6个音频提取方法了!(全新)

您是否曾经发现过一个音乐很棒的视频&#xff0c;并想从视频中提取音频&#xff1f;如今&#xff0c;关于提取mp4视频中的音频需求越来越常见。例如&#xff0c;您可能想从mp4格式的电影中提取音频&#xff0c;将音乐用作手机铃声&#xff0c;或在自己的视频项目中使用视频中的…

[Qt] Qt Creator 编码警告:warning:C4819

Qt项目使用VC&#xff08;2019 64bit&#xff09;编译器出现此错误。 warning&#xff1a;C4819&#xff1a;该文件包含不能在当前代码页&#xff08;936&#xff09;中表示的字符。请将该文件保存为Unicode格式以防止数据丢失。(可能这个警告内容也会在Qt Creator 中乱码) 如…

Matlab只选取自己需要的数据画图

在Matlab作图的时候&#xff0c;经常会在同一个坐标系中作很多数据的图&#xff0c;如下图所示&#xff1a; 这就会导致不同数据所作的线会重叠在一起&#xff0c;不利于数据分析。如果只想对比几个数据的趋势&#xff0c;直接修改代码太过麻烦&#xff0c;可通过Matlab的绘图…

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 1 一维数组传参 #include <stdio.h> void test(int arr[])//ok? {} void test(int arr[10])//ok? {} void test(int* arr)//ok? {} void test2(int* arr[20])…

Java毕业设计 基于SSM助学贷款管理系统

Java毕业设计 基于SSM助学贷款管理系统 SSM 助学贷款管理系统 功能介绍 学生&#xff1a;登录 修改密码 学生信息 贷款项目信息 申请贷款 留言信息 公告 学校负责人&#xff1a;登录 修改密码 学生管理 学校负责人信息 贷款项目 贷款申请审批 留言信息 公告 银行负责人&…

Linux中nginx.conf如何配置【搬代码】

Nginx 是一个独立的软件。 它是一款高性能的 Web 服务器、反向代理服务器和负载均衡器等&#xff0c;具有强大的功能和广泛的应用场景。它通常需要单独进行安装和配置来发挥其作用。 下载网址&#xff1a;http://nginx.org/en/download.html nginx.conf写法&#xff1a; #配置…

鸿蒙实现金刚区效果

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 所谓“金刚区"是位于APP功能入口的导航区域&#xff0c;通常以“图标文字”的宫格导航的形式出现。之所以叫“金刚区”&#xff0c;是因为该区域会随着业务目标的改变&#xff0c;展示不同的功能图标&#xff…

C++ 70 之 类模版中的成员函数,在类外实现

#include <iostream> #include <string> using namespace std;template<class T1, class T2> class Students10{ public:T1 m_name;T2 m_age;Students10(T1 name, T2 age); // 类内声明 类外实现// {// this->m_name name;// this->m_age …

CCAA质量管理【学习笔记】​​ 备考知识点笔记(六)质量改进系统方法与工具

第七节 质量改进系统方法与工具 1 质 量 改 进 方 法 概 述 可以说几乎每种质量管理领域的方法与工具都可以用于质量改进&#xff0c;但是一个组织在改进的整体推进中&#xff0c;往往不是采用单一的方法&#xff0c;会涉及多种改进的工具和手段&#xff0c;并依据一定的模式…

鸿蒙实现自定义Tabbar样式,显示数字红点提示

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 Tabs的链接参考&#xff1a;OpenHarmony Tabs TabContent的链接参考&#xff1a;OpenHarmony TabContent 通过查看链接参考我们知道可以通过TabContent的tabBar来实现自定义TabBar样式&#xff08;CustomBuilder&…

CloudTopExam考试系统

前言 整个项目的都是自己从0到1完成的&#xff08;包括数据库设计&#xff09;。 这个项目耗费了自己的很多心血&#xff0c;尤其是数据库的设计&#xff08;中途推翻重做了好几次&#x1f494;&#xff09;。在做这个之前也看过很多类似的开源项目&#xff0c;相较于商用的产品…

第六节 未登录与登录分支设立

经常我们在设计中,经常会遇到多条件分支打开相关界面,下面重点基于一个控件判断对未登录与已登录分支跳转案例进行说明。 一、设置元件 注意:动态面板默认设置 二、设置隐藏面板 三、关联条件情形 1、设置触发事件的元件 2、启用情形 3、添加情形,增加面板中“未登录”为…

文件操作(2)(C语言版)

文件的随机读写&#xff1a; fseek函数&#xff1a; 前面讲解了顺序读写的相关函数&#xff0c;这里介绍一些可以“指哪写哪的函数” 有三个参数&#xff1a; 1、文件的地址 2、相对于第三个参数origin偏移的位置 3、起始位置&#xff08;有三种&#xff09; 第一种&#xff…

参数搜索流形学习

目录 一、网格搜索1、介绍2、代码示例 二、HalvingGridSearch1、介绍2、代码示例 三、随机搜索1、介绍2、代码示例 三、贝叶斯搜索1、介绍2、代码示例 四、参数搜索总结五、流形学习1、LLE1、介绍2、官方代码示例 2、t-SNE1、介绍2、官方代码示例 一、网格搜索 1、介绍 网格搜…