个人业务网站制作,大庆网站建设,做静态网站工资多少,南宁公司网站建设公司哪家好OD统一考试#xff08;C卷#xff09; 分值#xff1a; 100分 题目描述
小明来到某学校当老师#xff0c;需要将学生按考试总分或单科分数进行排名#xff0c;你能帮帮他吗?
输入描述
第1行输入两个整数#xff0c;学生人数n和科目数量m。0n100,0m10… OD统一考试C卷 分值 100分 题目描述
小明来到某学校当老师需要将学生按考试总分或单科分数进行排名你能帮帮他吗?
输入描述
第1行输入两个整数学生人数n和科目数量m。0n100,0m10
第2行输入m个科目名称彼此之间用空格隔开。科目名称只由英文字母构成单个长度不超过10个字符。科目的出现顺序和后续输入的学生成绩一一对应。不会出现重复的科目名称。
第3行开始的n行每行包含一个学生的姓名和该生m个科目的成绩(空格隔开)学生不会重名。学生姓名只由英文字母构成长度不超过10个字符。成绩是0~100的整数依次对应第2行中输入的科目。
第n2行输入用作排名的科目名称。若科目不存在则按总分进行排序。
输出描述
输出一行按成绩排序后的学生名字空格隔开。成绩相同的按照学生姓名字典顺序排序。
示例1
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 100 82
shuxue输出
xiaohua fangfang minmin说明
按shuxue成绩排名依次是xiaohua、fangfang、minmin示例2
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 90 95
zongfen输出
fangfang minmin xiaohua说明
排序科目不存在按总分排序fangfang和minmin总分相同按姓名的字典顺序fangfang排在前面题解 考察多字段排序的基本用法 C
#include iostream
#include vector
#include algorithmusing namespace std;struct Student {string name;vectorint scores;int totalScore;
};int main() {int n, m;// 输入学生数量n和科目数量mcin n m;// 输入各科目名称vectorstring subjects(m);for (string subject : subjects) cin subject;// 输入学生信息包括姓名、各科成绩和计算总成绩vectorStudent students(n);for (Student student : students) {cin student.name;student.scores.resize(m);for (int score : student.scores) {cin score;student.totalScore score;}}// 输入要按照哪个科目排序string sortSubject;cin sortSubject;// 查找排序的科目在科目列表中的位置auto it find(subjects.begin(), subjects.end(), sortSubject);int sortIndex (it ! subjects.end()) ? distance(subjects.begin(), it) : -1;// 使用 Lambda 表达式进行排序sort(students.begin(), students.end(), [sortIndex](const Student a, const Student b) {if(sortIndex ! -1) { // 按指定的成绩降序排序return a.scores[sortIndex] b.scores[sortIndex];} else if(a.totalScore ! b.totalScore) { // 按总分降序return a.totalScore b.totalScore;} else { // 字典名字排序return a.name b.name;}});// 输出排序后的学生姓名for (const auto student : students) cout student.name ;return 0;
}
Java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;class Student {public String name;public ListInteger scores new ArrayList();public int totalScore;
}public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 输入学生数量n和科目数量mint n scanner.nextInt(), m scanner.nextInt();// 输入各科目名称ListString subjects IntStream.range(0, m).mapToObj(i - scanner.next()).collect(Collectors.toList());// 输入学生信息包括姓名、各科成绩和计算总成绩ListStudent students IntStream.range(0, n).mapToObj(i - {Student student new Student();student.name scanner.next();for (int j 0; j m; j) {int score scanner.nextInt();student.scores.add(score);student.totalScore score;}return student;}).collect(Collectors.toList());String sortSubject scanner.next();int sortIndex subjects.indexOf(sortSubject);Collections.sort(students, (o1, o2) - {if (sortIndex ! -1) { // 按指定的成绩降序排序return o2.scores.get(sortIndex) - o1.scores.get(sortIndex);} else if (o1.totalScore ! o2.totalScore) { // 按总分降序return o2.totalScore - o1.totalScore;} else { // 字典名字排序return o1.name.compareTo(o2.name);}});ListString collect students.stream().map(s - s.name).collect(Collectors.toList());String result String.join( , collect);System.out.println(result);}
}Python
class Student:def __init__(self):self.name self.scores []self.total_score 0# 输入学生数量n和科目数量m
n, m map(int, input().split())
# 输入各科目名称
subjects input().split()# 输入学生信息包括姓名、各科成绩和计算总成绩
students []
for _ in range(n):student Student()stu_split input().split()student.name stu_split[0]student.scores [int(stu_split[i]) for i in range(1, m 1)]student.total_score sum(student.scores)students.append(student)sort_subject input()
sort_index subjects.index(sort_subject) if sort_subject in subjects else -1
# 使用 Lambda 表达式进行排序
students.sort(keylambda x: (-x.scores[sort_index] if sort_index ! -1 else 0, -x.total_score, x.name))print( .join(student.name for student in students))
整理题解不易 如果有帮助到您请给点个赞 ❤️ 和收藏 ⭐让更多的人看到。