按课程总成绩从高到低排序输出各个学生的信息

318 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

按课程总成绩从高到低排序输出各个学生的信息

题目内容: 设计一个结构体类型,包含姓名、学号、语文成绩、数学成绩、英语成绩。输入n个学生的信息,输出按三门课程总成绩从高到低排序的各个学生的姓名、学号和各科成绩。

输入格式: 首先第1行输入一个整数n(1<=n<=20),表示学生人数,然后输入n行,每行包含一个学生的信息:姓名(不超过20个字符)、学号(不超过12个字符)以及三门课程成绩,各信息用空格分隔。

输出格式: 从高到低排序的各个学生的姓名、学号和各科成绩,各信息用空格分隔,各学生之间换行。

输入样例: 3 Zhangling 1801 80 85 78 Wangliang 1802 87 83 82 Fangfang 1803 90 89 83

输出样例: Fangfang 1803 90 89 83 Wangliang 1802 87 83 82 Zhangling 1801 80 85 78 时间限制:500ms内存限制:32000kb

思路

思路上很简单,主要是如何使用C++相关排序语法,使用lambda函数或者其他函数指针作为排序的比较函数。

代码实现:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct Student {
	string name;
	string id;
	double marks1, mark2, mark3;
};

int main(int argc, char* argv[]) {
	auto stuList = vector<Student>();
	int n;
	cin >> n;
	for (auto i = 0; i < n; i++) {
		string tmpName, tmpId;
		double tmpMark1, tmpMark2, tmpMark3;
		cin >> tmpName >> tmpId >> tmpMark1 >> tmpMark2 >> tmpMark3;
		stuList.push_back({ tmpName, tmpId, tmpMark1, tmpMark2, tmpMark3 });
	}

	sort(stuList.begin(), stuList.end(), [](const Student& s1, const Student& s2) {
		return (s1.marks1 + s1.mark2 + s1.mark3) > (s2.marks1 + s2.mark2 + s2.mark3);
	});
	
	for (auto x:stuList) {
		cout << x.name << " " << x.id << " " << x.marks1 << " " << x.mark2 << " " << x.mark3 << endl;;
	}
	return 0;
}

啦啦啦,over(●'◡'●)