华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)

题目描述

小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧!

输入描述

  1. 第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。

    • 0 < n < 100
    • 0 < m < 10
  2. 第二行包含 m 个科目名称,用空格隔开。

    • 科目名称只包含英文字母,长度不超过10个字符。
    • 科目的出现顺序和后续输入的学生成绩一一对应。
    • 不会出现重复的科目名称。
  3. 接下来的 n 行,每行包含一个学生的姓名和该生 m 个科目的成绩(用空格隔开)。

    • 学生不会重名。
    • 学生姓名只包含英文字母,长度不超过10个字符。
    • 成绩是0~100的整数,依次对应第二行输入的科目。
  4. 第 n+2 行输入用作排名的科目名称。如果科目不存在,则按总分进行排序。

输出描述

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

示例

在这里插入图片描述

题目解析

本题的核心在于动态排序规则的应用。排序规则可能基于特定科目的成绩,也可能基于总分。排序过程需要考虑两个因素:

  1. 排序规则:根据最后一行输入的科目名称确定。如果科目存在,则按该科目成绩排序;如果不存在,则按总分排序。

  2. 排序细节:在成绩相同的情况下,需要按学生姓名的字典顺序进行排序。

C++代码实现

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>using namespace std;// 学生信息结构体
struct Student {string name;vector<int> scores;int totalScore;
};// 自定义比较函数,用于排序
bool compareStudents(const Student& a, const Student& b, int sortIndex) {// 如果排序索引指向总分,则比较总分if (sortIndex == -1) {return (a.totalScore < b.totalScore) || (a.totalScore == b.totalScore && a.name < b.name);}// 否则,比较指定科目的成绩return (a.scores[sortIndex] < b.scores[sortIndex]) || (a.scores[sortIndex] == b.scores[sortIndex] && a.name < b.name);
}int main() {int n, m;cin >> n >> m;vector<string> subjects(m);for (int i = 0; i < m; ++i) {cin >> subjects[i];}vector<Student> students(n);for (int i = 0; i < n; ++i) {cin >> students[i].name;students[i].scores.resize(m);students[i].totalScore = 0;for (int j = 0; j < m; ++j) {cin >> students[i].scores[j];students[i].totalScore += students[i].scores[j];}}string sortSubject;cin >> sortSubject;// 确定排序索引,如果科目不存在,则索引为-1,表示按总分排序int sortIndex = -1;for (int i = 0; i < m; ++i) {if (subjects[i] == sortSubject) {sortIndex = i;break;}}// 根据排序索引进行排序sort(students.begin(), students.end(), [&](const Student& a, const Student& b) {return compareStudents(a, b, sortIndex);});// 输出排序后的学生名字for (const auto& student : students) {cout << student.name << " ";}cout << endl;return 0;
}

Java代码实现

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.Vector;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n, m;n = scanner.nextInt();m = scanner.nextInt();Vector<String> subjects = new Vector<>();for (int i = 0; i < m; ++i) {subjects.add(scanner.next());}Student[] students = new Student[n];for (int i = 0; i < n; ++i) {students[i] = new Student();students[i].name = scanner.next();students[i].scores = new int[m];students[i].totalScore = 0;for (int j = 0; j < m; ++j) {students[i].scores[j] = scanner.nextInt();students[i].totalScore += students[i].scores[j];}}String sortSubject = scanner.next();int sortIndex = -1;for (int i = 0; i < m; ++i) {if (subjects.get(i).equals(sortSubject)) {sortIndex = i;break;}}Arrays.sort(students, new Comparator<Student>() {@Overridepublic int compare(Student a, Student b) {return compareStudents(a, b, sortIndex);}});for (Student student : students) {System.out.print(student.name + " ");}System.out.println();}public static boolean compareStudents(Student a, Student b, int sortIndex) {// 如果排序索引指向总分,则比较总分if (sortIndex == -1) {return (a.totalScore < b.totalScore) || (a.totalScore == b.totalScore && a.name.compareTo(b.name) < 0);}// 否则,比较指定科目的成绩return (a.scores[sortIndex] < b.scores[sortIndex]) || (a.scores[sortIndex] == b.scores[sortIndex] && a.name.compareTo(b.name) < 0);}
}

Python代码实现

import sys
from collections import Counter
from typing import Listclass Main:def main(self):n, m = map(int, input().split())subjects = list(map(str, input().split()))students = []for i in range(n):students.append({"name": input(), "scores": list(map(int, input().split())), "totalScore": sum(students[-1]["scores"])})sort_subject = input()sort_index = -1for i, subject in enumerate(subjects):if subject == sort_subject:sort_index = ibreakstudents.sort(key=lambda x: (-x["totalScore"], x["name"]) if sort_index == -1 else (-x["scores"][sort_index], x["name"]))for student in students:print(student["name"], end=" ")print()if __name__ == "__main__":Main().main()

C代码实现

#include <stdio.h>
#include <stdbool.h>
#include <string.h>typedef struct {char name[20];int scores[100];int totalScore;
} Student;int compare(const void *a, const void *b) {Student *students = (Student *)a;Student *other = (Student *)b;int sort_index = -1;for (int i = 0; i < students[0].scores[0]; i++) {if (strcmp(students[0].scores[i + 1], sort_subject) == 0) {sort_index = i + 1;break;}}if (sort_index == -1) {return (-students[0].totalScore == -other[0].totalScore) ? strcmp(students[0].name, other[0].name) : -1;} else {return (-students[0].scores[sort_index] == -other[0].scores[sort_index]) ? strcmp(students[0].name, other[0].name) : -1;}
}int main() {int n, m;scanf("%d %d", &n, &m);char sort_subject[20];scanf("%s", sort_subject);Student students[n];for (int i = 0; i < n; i++) {scanf("%s", students[i].name);for (int j = 0; j < m; j++) {scanf("%d", &students[i].scores[j]);}students[i].totalScore = 0;for (int j = 0; j < m; j++) {students[i].totalScore += students[i].scores[j];}}qsort(students, n, sizeof(students[0]), compare);for (int i = 0; i < n; i++) {printf("%s", students[i].name);if (i < n - 1) {printf(" ");}}printf("\n");return 0;
}

Go代码实现

package mainimport ("fmt""io""strings""sort"
)// 学生信息结构体
type Student struct {name  stringscores []inttotalScore int
}// 自定义比较函数,用于排序
func compareStudents(a, b Student, sortIndex int) bool {// 如果排序索引指向总分,则比较总分if sortIndex == -1 {return (a.totalScore < b.totalScore) || (a.totalScore == b.totalScore && a.name < b.name)}// 否则,比较指定科目的成绩return (a.scores[sortIndex] < b.scores[sortIndex]) || (a.scores[sortIndex] == b.scores[sortIndex] && a.name < b.name)
}func main() {var reader io.Readerreader = os.Stdinvar n, m intfmt.Fscanf(reader, "%d %d", &n, &m)var subjects []stringfor i := 0; i < m; i++ {var subject stringfmt.Fscanf(reader, "%s", &subject)subjects = append(subjects, subject)}students := make([]Student, n)for i := 0; i < n; i++ {var name stringfmt.Fscanf(reader, "%s", &name)students[i].name = namestudents[i].scores = make([]int, m)students[i].totalScore = 0for j := 0; j < m; j++ {fmt.Fscanf(reader, "%d", &students[i].scores[j])students[i].totalScore += students[i].scores[j]}}var sortSubject stringfmt.Fscanf(reader, "%s", &sortSubject)// 确定排序索引,如果科目不存在,则索引为-1,表示按总分排序sortIndex := -1for i, subject := range subjects {if subject == sortSubject {sortIndex = ibreak}}// 根据排序索引进行排序sort.Slice(students, func(i, j int) bool {return compareStudents(students[i], students[j], sortIndex)})// 输出排序后的学生名字for _, student := range students {fmt.Println(student.name)}
}

PHP代码实现

<?php
$n = 0;
$m = 0;
$subjects = [];
$students = [];
$sortSubject = '';// 学生信息结构体
class Student {public $name;public $scores;public $totalScore;public function __construct($name, $scores, $totalScore) {$this->name = $name;$this->scores = $scores;$this->totalScore = $totalScore;}
}// 自定义比较函数,用于排序
function compareStudents($a, $b, $sortIndex) {// 如果排序索引指向总分,则比较总分if ($sortIndex == -1) {return $a->totalScore < $b->totalScore || ($a->totalScore == $b->totalScore && $a->name < $b->name);}// 否则,比较指定科目的成绩return $a->scores[$sortIndex] < $b->scores[$sortIndex] || ($a->scores[$sortIndex] == $b->scores[$sortIndex] && $a->name < $b->name);
}function main() {$stdin = STDIN;fscanf($stdin, "%d %d", $n, $m);for ($i = 0; $i < $m; ++$i) {fscanf($stdin, "%s", $subjects[$i]);}for ($i = 0; $i < $n; ++$i) {fscanf($stdin, "%s", $students[$i]->name);$students[$i]->scores = array_fill(0, $m, 0);$students[$i]->totalScore = 0;for ($j = 0; $j < $m; ++$j) {fscanf($stdin, "%d", $students[$i]->scores[$j]);$students[$i]->totalScore += $students[$i]->scores[$j];}}fscanf($stdin, "%s", $sortSubject);// 确定排序索引,如果科目不存在,则索引为-1,表示按总分排序$sortIndex = -1;for ($i = 0; $i < $m; ++$i) {if ($subjects[$i] == $sortSubject) {$sortIndex = $i;break;}}// 根据排序索引进行排序usort($students, function($a, $b) use ($sortIndex) {return compareStudents($a, $b, $sortIndex);});// 输出排序后的学生名字foreach ($students as $student) {echo $student->name . " ";}echo PHP_EOL;
}main();

JS代码实现

const { Your_function } = require(‘Your_script’);// 学生信息结构体
class Student {constructor(name, scores) {this.name = name;this.scores = scores;this.totalScore = this.calculateTotalScore();}calculateTotalScore() {let totalScore = 0;for (let score of this.scores) {totalScore += score;}return totalScore;}
}// 自定义比较函数,用于排序
function compareStudents(a, b, sortIndex) {// 如果排序索引指向总分,则比较总分if (sortIndex === -1) {return (a.totalScore < b.totalScore) || (a.totalScore === b.totalScore && a.name < b.name);}// 否则,比较指定科目的成绩return (a.scores[sortIndex] < b.scores[sortIndex]) || (a.scores[sortIndex] === b.scores[sortIndex] && a.name < b.name);
}async function main() {const [n, m] = await readLine();const subjects = await readLine().join('').split(' ');const students = await Promise.all(Array.from({ length: n }, async (_, i) => {const [name] = await readLine();const scores = await readLine().map(Number);return new Student(name, scores);}));const sortSubject = await readLine().join('');const sortIndex = subjects.indexOf(sortSubject);students.sort((a, b) => {return compareStudents(a, b, sortIndex);});console.log(students.map(student => student.name).join(' '));
}main().catch(error => {console.error(error);process.exit(1);
});

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

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

相关文章

【Makefile语法 01】程序编译与执行

目录 一、编译原理概述 二、编译过程分析 三、编译动静态库 四、执行过程分析 一、编译原理概述 make&#xff1a; 一个GCC工具程序&#xff0c;它会读 makefile 脚本来确定程序中的哪个部分需要编译和连接&#xff0c;然后发布必要的命令。它读出的脚本&#xff08;叫做 …

Mysql Day03

多表设计 一对多 在多的一方添加外键约束&#xff0c;关联另外一方主键 一对一 任意一方添加外键约束&#xff0c;关联另外一方主键 多对多 建立第三张中间表&#xff0c;中间表至少包含两个外键&#xff0c;分别关联两方主键 idstu_idcourse_id 1 11 2 12313421524 案…

传输频宽是啥?对网速影响有多大?

频宽&#xff0c;即WIFI频道宽度&#xff0c;又称为WIFI信道宽度&#xff0c;是WiFi Channel width的缩写。从科学的定义来说&#xff0c;Wi-Fi频道宽度&#xff0c;是指Wi-Fi无线信号在频谱上所占用的带宽大小。它决定了Wi-Fi网络的数据传输速率和稳定性&#xff0c;一般有20M…

【深度学习】:滴滴出行-交通场景目标检测

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现&#xff08;实验满分&#xff09;&#xff0c;只展示主要任务实验结果&#xff0c;如果需要详细的实验报告或者代码可以私聊博主&#xff0c;接实验技术指导1对1 有任…

医学护理答案怎么查找? #笔记#学习方法#微信

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式&#xff0c;可以快速查找问题解析&#xff0c;加深对题目答案的理解。 1.滴墨书摘 这款软件相当于一个在线“摘抄本”&#xff0c;我们可以利用它来记录一些阅读时遇到的好句子或者是段落&#xff0c;或许下次…

VitePress-12-markdown中使用vue的语法

前言 VitePress 中&#xff0c;markdown文档最终都会转换成为 html文件&#xff0c;我们在访问的时候&#xff0c;也是直接访问的 xxx.html 文件。而且&#xff0c;markdown文档会被作为 [vue单文件] 进行处理&#xff0c;因此&#xff0c;我们我们可以在文档中使用 vue 语法&…

求职|基于Springboot的校园求职招聘系统设计与实现(源码+数据库+文档)

校园求职招聘系统目录 目录 基于Springboot的校园求职招聘系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、企业信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

【JS逆向九】逆向某混淆网站源码,模拟 加密,解密,密钥生成

逆向日期&#xff1a;2024.02.09 使用工具&#xff1a;Node.js 是否有混淆&#xff1a;源代码混淆 加密方法&#xff1a;AES标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff0…

【云原生进阶之PaaS中间件】第三章Kafka-4.3.1-broker 工作流程

1 kafka broker 1.1 kafka broker 工作流程 这一部分大体了解下kafka Broker的工作流程&#xff0c;看一下zookeeper在kafka broker工作中发挥的作用&#xff0c;那些重要数据在zookeeper中存储。 1.1.1 zookeeper存储kafka的信息 zookeeper在kafka中扮演了重要的角色&#x…

【前端】Vue实现网站导航 以卡片形式显示(附Demo)

目录 前言1. html版本2. Vue2.1 Demo12.2 Demo2 前言 单独做一个跳转页面推荐阅读&#xff1a;【前端】实现Vue组件页面跳转的多种方式 但是如果网站多了&#xff0c;推荐卡片式导航&#xff0c;具体可看下文&#xff1a;&#xff08;以图片显示显示各个网站&#xff0c;图片…

Python入门知识点分享——(二十)继承和方法重写

今天是大年三十&#xff0c;祝大家龙年大吉&#xff0c;当然无论何时何地&#xff0c;我们都不要忘记继续学习。今天介绍的是继承和方法重写这两种面向对象编程特点。继承机制指的是&#xff0c;一个类&#xff08;我们称其为子类或派生类&#xff09;可以使用另一个类&#xf…

拟合案例1:matlab积分函数拟合详细步骤及源码

本文介绍一下基于matlab实现积分函数拟合的过程。采用的工具是lsqcurvefit和nlinfit两个函数工具。关于包含积分运算的函数,这里可以分为两大类啊。我们用具体的案例来展示:一种是积分运算中不包含这个自变量,如下图的第一个公式,也就是说它这个积分运算只有R和Q这两个待定…

女程序员失业半年,某央企以为她已婚已孕,准备发offer,结果发现她未婚未孕,立马反悔,取消offer。...

职场中&#xff0c;性别平等一直是热议的话题。特别是女性职员&#xff0c;在招聘和晋升的过程中&#xff0c;往往面临着不小的挑战。 最近&#xff0c;一个帖子在网上引发了广泛关注。一位女性因为失业半年终于拿到了央企的offer&#xff0c;却因为企业误以为她已婚已孕而准备…

二阶系统的迹-行列式平面方法(trace-determinant methods for 2nd order system)

让我们再次考虑二阶线性系统 d Y d t A Y \frac{d\mathbf{Y}}{dt}A\mathbf{Y} dtdY​AY 我们已经知道&#xff0c;分析这种二阶系统。最主要的是注意它的特征值情形。 &#xff08;此处没有重根的情形&#xff0c;所有是partial&#xff09; 而特征值&#xff0c;也就是系…

三、搜索与图论

DFS 排列数字 #include<iostream> using namespace std; const int N 10; int a[N], b[N]; int n;void dfs(int u){if(u > n){for(int i 1; i < n; i)cout<<a[i]<<" ";cout<<endl;return;}for(int i 1; i < n; i){if(!b[i]){b[…

视觉开发板—K210自学笔记(二)

视觉开发板—K210 一、开发之前的准备 工欲善其事必先利其器。各位同学先下载下面的手册&#xff1a; 1.Sipeed-Maix-Bit 资料下载&#xff1a;https://dl.sipeed.com/shareURL/MAIX/HDK/Sipeed-Maix-Bit/Maix-Bit_V2.0_with_MEMS_microphone 2.Sipeed-Maix-Bit 规格书下载&…

MYSQL笔记:约束条件

MYSQL笔记&#xff1a;约束条件 主键约束 不能为空&#xff0c;值必须是不同的&#xff08;唯一性&#xff09; 一个表只能修饰一个主键 PRIMARY KEY自增约束 AUTO_INCREMENT唯一键约束 可以为空 unique非空约束 not null 默认值约束 default 外键约束 foreign key …

【2023年终总结】感恩南洋经历,2024收拾再启程

新年祝福 值此2024农历新年到来之际&#xff0c;祝一直支持“IT进阶之旅”的各位小伙伴们新的一年伴随着新的开始&#xff0c;新的旅程&#xff0c;新的突破&#xff0c;新的收获&#xff0c;新的期待..... 写在前面 2023&#xff0c;“IT进阶之旅”一直处于“停更”状态&#…

OCP使用web console创建和构建应用

文章目录 环境登录创建project赋予查看权限部署第一个image检查pod扩展应用 部署一个Python应用连接数据库创建secret加载数据并显示国家公园地图 清理参考 环境 RHEL 9.3Red Hat OpenShift Local 2.32 登录 在 crc start 启动crc时&#xff0c;可以看到&#xff1a; .....…

律师小程序,在线咨询,在线问答小程序修复头像

应用介绍 演示前端小程序&#xff1a; #小程序://问卜易学咨询/cVtT0ndctaecDKd 律师小程序是一种智能化的服务平台&#xff0c;提供了多种有益的功能。首先&#xff0c;它能够实现在线法律咨询&#xff0c;用户可以通过文字、语音或视频与律师实时沟通&#xff0c;获得专业意见…