洛谷 P1104生日

题目描述

cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。
输入格式
有2行,

第1行为OI组总人数n;

第22行至第n+1行分别是每人的姓名s、出生年y、月m、日d。

输出格式
有n行,

即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)
输入输出样例

输入:
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
输出:
Luowen
Yangchu
Qiujingya

分析

1.因为每位同学的姓名和生日都是一个整体,所以需要用到结构体。
2.并且还要按照生日排序,所以需要用到sort()函数。

源代码

#include <iostream>
#include <string>
//因为要使用sort()函数,所以要包涵下面这个头文件
#include <algorithm>

using namespace std;

//生日结构体
typedef struct
{
	int year;           //年
	int month;          //月
	int day;            //日
}Birthday;
//学生信息结构体
typedef struct
{
	int id;             //编号
	string name;        //姓名
	Birthday date;      //生日
}Student;
int num;                //学生人数
Student student[105];   //学生信息

//作为sort的第三个参数,即排序方法
bool compare(Student x, Student y)
{
	if(x.date.year != y.date.year)
	{
		return x.date.year < y.date.year;
	}
	else if(x.date.month != y.date.month)
	{
		return x.date.month < y.date.month;
	}
	else if(x.date.day != y.date.day)
	{
		return x.date.day < y.date.day;
	}
	else
	{
		return x.id > y.id;
	}
}

int main(void)
{
	cin >> num;
	//输入学生信息
	for(int i = 0; i < num; i++)
	{
		student[i].id = i + 1;
		cin >> student[i].name
			>> student[i].date.year
			>> student[i].date.month
			>> student[i].date.day;
	}
	//调用sort()函数进行排序
	sort(student, student + num , compare);
	//输出
	for(int i = 0; i < num; i++)
	{
		cout << student[i].name << endl;
	}
	
	return 0;
}

总结

本题的关键在于sort()函数,sort()函数有三个参数:
1.第一个参数是数组的首地址;
2.第二个参数是数组结束地址;
3.第三个参数是排序的方法。(如果不写,则默认是从小到大排序)。
有关sort()函数的使用方法,大家可以自行百度,这里只是做了简单的介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值