高密做网站哪家好代理/商丘网站推广公司
题目描述
小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧!
输入描述
-
第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。
- 0 < n < 100
- 0 < m < 10
-
第二行包含 m 个科目名称,用空格隔开。
- 科目名称只包含英文字母,长度不超过10个字符。
- 科目的出现顺序和后续输入的学生成绩一一对应。
- 不会出现重复的科目名称。
-
接下来的 n 行,每行包含一个学生的姓名和该生 m 个科目的成绩(用空格隔开)。
- 学生不会重名。
- 学生姓名只包含英文字母,长度不超过10个字符。
- 成绩是0~100的整数,依次对应第二行输入的科目。
-
第 n+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);
});
相关文章:

华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)
题目描述 小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧! 输入描述 第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。 0 < n < 1000 < m &…...

训练集,验证集,测试集比例
三者的区别 训练集(train set) —— 用于模型拟合的数据样本。验证集(validation set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...

Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示
🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...

Java学习笔记2024/2/8
面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对…...

【安防】三个问题:IPC和ITC主要的差异点和相同点 、影响图像成像效果的因素有哪些、摩尔纹如何产生的和消除方法
问题一、IPC和ITC主要的差异点和相同点 差异点 1、应用场景:IPC主要应用于普通安防监控领域,如广场、商场、公园、写字楼等。它们通常被用于监控室内或有限区域的安全,例如,监控办公室、仓库、门口等。而ITC则主要应用于交通领…...

Windows 安装 MySQL 最新最简教程
Windows 安装 MySQL 最新最简教程 官网地址 https://dev.mysql.com/downloads/mysql/下载 MySQL zip 文件 配置 MySQL1、解压文件 2、进入 bin 目录 搜索栏输入 cmd 回车进入命令行 C:\Users\zhong\Desktop\MySQL\mysql-8.3.0-winx64\mysql-8.3.0-winx64\bin 注意这里是你自己…...

uniapp 本地存储的方式
1. uniapp 本地存储的方式 在uniapp开发中,本地存储是一个常见的需求。本地存储可以帮助我们在客户端保存和管理数据,以便在应用程序中进行持久化存储。本文将介绍uniapp中本地存储的几种方式,以及相关的代码示例。 1.1. 介绍 在移动应用开发…...

25、数据结构/二叉树相关练习20240207
一、二叉树相关练习 请编程实现二叉树的操作 1.二叉树的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树各个节点度的个数 6.二叉树的深度 代码: #include<stdlib.h> #include<string.h> #include<stdio.h> ty…...

数据结构——D/二叉树
🌈个人主页:慢了半拍 🔥 创作专栏:《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 🏆我的格言:一切只是时间问题。 1.树概念及结构 1.1树的概念 树是一种非线性的…...

redis:七、集群方案(主从复制、哨兵模式、分片集群)和面试模板
redis集群方案 在Redis中提供的集群方案总共有三种(一般一个redis节点不超过10G内存) 主从复制哨兵模式分片集群 主从复制(主从数据同步) replid和offset Replication Id:简称replid,是数据集的标记&a…...

没有事情做 随手写的小程序
Qt 代码包 在百度网盘里 链接: https://pan.baidu.com/s/17yjeAkzi18upfqfD7KxXOQ?pwd6666 dialog.h : #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <mythread.h>QT_BEGIN_NAMESPACE namespace Ui { class Dialog; } QT_END_NAMESPACEclas…...

简单说网络:TCP+UDP
TCP和UPD: (1)都工作在传输层 (2)目的都是在程序之中传输数据 (3)数据可以是文本、视频或者图片(对TCP和UDP来说都是一堆二进制数没有太大区别) 一、区别:一个基于连接一个基于非连接 将人与人之间的通信比喻为进程和进程之前的通信:基本上有两种方式(1)写信;(2)打电话;这…...

Containerd 的前世今生和保姆级入门教程
Containerd 的前世今生 很久以前,Docker 强势崛起,以“镜像”这个大招席卷全球,对其他容器技术进行致命的降维打击,使其毫无招架之力,就连 Google 也不例外。Google 为了不被拍死在沙滩上,被迫拉下脸面&…...

分享78个行业PPT,总有一款适合您
分享78个行业PPT,总有一款适合您 78个行业PPT下载链接:https://pan.baidu.com/s/19UL58I5Z1QZidVrq50v6fg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…...

VR全景技术可以应用在哪些行业,VR全景技术有哪些优势
引言: VR全景技术(Virtual Reality Panorama Technology)是一种以虚拟现实技术为基础,通过360度全景影像、立体声音、交互元素等手段,创造出沉浸式的虚拟现实环境。该技术不仅在娱乐领域有着广泛应用,还可…...

c#cad 创建-点(六)
运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点,并将其添加到模型空间块表记录中。 代码的主要步骤如下: 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…...

【JS逆向八】逆向某企查网站的headers参数,并模拟生成 仅供学习
逆向日期:2024.02.07 使用工具:Node.js 加密方法:未知 / 标准库Hmac-SHA512 文章全程已做去敏处理!!! 【需要做的可联系我】 可使用AES进行解密处理(直接解密即可):AES加…...

Springboot+vue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目
演示视频: Springbootvue的社区智慧养老监护管理平台设计与实现(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的社区智慧养老监护管理平台设…...

STM32学习笔记——定时器
目录 一、定时器功能概述 1、基本定时器(TIM6&TIM7) 工作原理 时序 2、通用计时器(TIM2&TIM3&TIM4&TIM5) 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…...

Android编程权威指南(第四版)- 第 4 章 UI状态的保存与恢复
文章目录 代码:依赖MainActivityQuizViewModelQuestion知识点代码: 大体是一样的,修改了一些 依赖 implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")MainActivity package com.example.geoquizimport androidx.appcompat.app.AppCompatActivi…...

代理模式
如有错误或有补充,以及任何改进的意见,请留下您的高见 定义 代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式是一种结构型模式,它可以在不修改源码的情况下增强方法,在方法前后增…...

C++三剑客之std::any(一) : 使用
相关系列文章 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二):深入剖析 目录 1.概述 2.构建方式 2.1.构造函数 2.2.std::make_any 2.3.operator分配新值 3.访问值…...

2024年:用OKR管理你的生活
在科技高速发展的时代,越来越多的企业和团队开始采用OKR(Objectives and Key Results)管理方法来设定目标并跟踪进度。你是否想过,将OKR理念引入个人生活,以更有效地实现人生目标?本文将探讨如何在2024年运…...

Lua迭代器以及各种源函数的实现
范型for 范型for的格式如下所示: for <var-list> in <exp-list> do<body> end var-list指变量名列表,可以为多个,exp-list指表达式列表,通常情况下只有一个值。可以更具体地写为另一种形式: fo…...

e5 服务器具备哪些性能特点?
随着云计算和大数据技术的不断发展,服务器作为数据中心的核心设备,其性能特点也日益受到关注。其中,E5服务器作为当前主流的服务器类型之一,具备许多优秀的性能特点。本文将详细介绍E5服务器的性能特点,帮助读者更好地…...

《C++ Primer Plus》《2、开始学习C++》
文章目录 0 前言:1 进入C1.1 main()函数1.2 C注释1.3 预处理器和iostream1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.7 C源代码的格式化 2 C语句2.1 声明语句和变量2.2 赋值语句2.3 cout语句 3 其他C语句3.1使用cin3.2 使用cout进行拼接3.3 类简介 4 函数4.1 …...

Backtrader 文档学习- Sizers
Backtrader 文档学习- Sizers 1.概述 智能仓位 Strategy提供了交易方法,即:buy,sell和close。看一下buy的定义: def buy(self, dataNone,sizeNone, priceNone, plimitNone,exectypeNone, validNone, tradeid0, **kwargs):注意&…...

基于YOLOv8算法的照片角度分类项目实践
目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …...

go语言进阶篇——面向对象(一)
什么是面向对象 在我们设计代码时,比如写一个算法题或者写一个问题结局办法时,我们常常会使用面向过程的方式来书写代码,面向过程主要指的是以解决问题为中心,按照一步步具体的步骤来编写代码或者调用函数,他在问题规…...

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码
1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏,找出油漆围栏的方法,使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的,所以返回10^97的模。 计算结果: 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…...