1923: 2018蓝桥杯培训-STL应用专题-day 1 sort作业题3

本文介绍如何利用C++ STL库中的sort函数,根据学生成绩的总分、语文和数学成绩进行复杂排序。通过具体示例,详细展示了如何定义结构体存储学生成绩,以及如何自定义比较函数实现特定排序需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

STL库中有许多非常实用的函数,如sort,set,map,vector,queue等。   此题为sort的应用教学,题目如下:   读入n条学生成绩记录,包括学生姓名,总成绩,语文,数学和英语成绩,要求按总成绩从高到低输出n条记录,每条记录占一行。总成绩相同时按语文成绩从高到低输出,语文成绩相同时按数学成绩从高到低输出。(没有两个人的成绩完全一样)

输入:

第一行读入一个 n ( 0<n<=100)  接下来n行每行读入学生姓名,总成绩,语文,数学和英语成绩,中间以空格隔开

输出:

n行按要求排序好的记录。

样例输入

3
Lsx 270 90 90 90
Ywz 275 92 93 90
Wjx 255 85 85 85

样例输出

Ywz 275 92 93 90
Lsx 270 90 90 90
Wjx 255 85 85 85
#include <iostream>
#include <algorithm>
using namespace std;

struct Student
{
	string name;
	int sum;
    int Chinese;
    int Math;
    int English;
}student[100];


//总成绩相同时按语文成绩从高到低输出,语文成绩相同时按数学成绩从高到低输出。
//(没有两个人的成绩完全一样)
bool cmp(Student s1, Student s2)
{
	if(s1.sum != s2.sum)
	{
		return s1.sum > s2.sum;
	}
	else
	{
		if(s1.Chinese != s2.Chinese)
		{
			return s1.Chinese > s2.Chinese;
		}
		else
		{
			return s1.Math > s2.Math;
		}
	}
}

int main(int argc, char** argv) 
{
	int n;
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		cin >> student[i].name >>student[i].sum >> student[i].Chinese 
		>> student[i].Math >> student[i].English;
	}
	sort(student, student+n, cmp);

	for(int i = 0; i < n; i++)
	{
		cout << student[i].name << " " << student[i].sum << " " << student[i].Chinese << 
		" " << student[i].Math << " " << student[i].English << endl;
		
	}	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值