C語言 按課程總成績從高到低排序輸出各個學生的信息

按課程總成績從高到低排序輸出各個學生的信息

題目內容:
設計一個結構體類型,包含姓名、學號、語文成績、數學成績、英語成績。輸入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

代碼實現:

#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(●’◡’●)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章