生日排序

生日排序


from jisuanke T1715
Time limit : 1000ms
Memory limit : 131072

题目描述:

蒜头学院开学了,老师要统计班里每个人的生日,并按照出生日期从早到晚排序。

输入格式:

第一行一个整数 n (1≤n≤100)n (1≤n≤100),班级班级的人数。

接下来 nn 行,每行包含一个字符串 ss 和三个整数 y,m,dy,m,d,表示姓名为 ss 的同学出生日期是 yy 年 mm 月 dd 日。

保证所有日期合法,姓名由小写字母构成,不超过 2020 个字符。

输出格式:

输出 nn 行,每行一个字符串表示姓名。如果有两个同学出生日期相同,输入靠后的同学先输出。

样例输入:

3
qwb 1996 6 30
gyt 1995 7 28
wc  1996 6 30

样例输出:

gyt
wc
qwb

sort:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Node {
	string name;	//名字
	int in;			//输入顺序
	int y, m, d;	//年月日
};
bool cmp(Node a, Node b) {
	if (a.y == b.y) {
		if (a.m == b.m) {
			if (a.d == b.d)
				return a.in > b.in;
			return a.d < b.d;
		}
		return a.m < b.m;
	}
	return a.y < b.y;
	//比较规则,这里自己好好思考一下,年小排在前,相等看月,再相等看日,再相同看输入顺序
}
int main() {
	int n; Node a;
	cin >> n;
	vector<Node> v;
	for (int i = 1; i <= n; ++i)
		cin >> a.name >> a.y >> a.m >> a.d, a.in = i, v.push_back(a);
	sort(v.begin(), v.end(), cmp);
	for (int i = 0; i < n; ++i)
		cout << v[i].name << endl;
	return 0;
}
priority_queue:
#include<iostream>
#include<queue>
using namespace std;
struct Node {
	string name;	//名字
	int in;			//输入顺序
	int y, m, d;	//年月日
};
struct cmp {
	bool operator()(Node a, Node b){
		if (a.y == b.y) {
			if (a.m == b.m) {
				if (a.d == b.d)
					return a.in < b.in;
				return a.d > b.d;
			}
			return a.m > b.m;
		}
		return a.y > b.y;
	}//比较规则,这里自己好好思考一下,年小排在前,相等看月,再相等看日,再相同看输入顺序
};
int main() {
	int n; Node a;
	cin >> n;
	priority_queue<Node, vector<Node>, cmp> q;
	for (int i = 1; i <= n; ++i)
		cin >> a.name >> a.y >> a.m >> a.d, a.in = i, q.push(a);
	for (int i = 0; i < n; ++i)
		cout << q.top().name << endl, q.pop();
	return 0;
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,根据您提供的信息,这是一个按照生日排序的函数,按照年龄从小到大排序。以下是一种实现方式: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct person { char name[20]; int year; int month; int day; }; int compare(struct person a, struct person b) { if (a.year != b.year) { return a.year - b.year; } if (a.month != b.month) { return a.month - b.month; } return a.day - b.day; } void bubble_sort(struct person p[], int n) { int i, j; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (compare(p[j], p[j+1]) > 0) { struct person temp = p[j]; p[j] = p[j+1]; p[j+1] = temp; } } } } void birth_sort(struct person p[], int n) { bubble_sort(p, n); } int main() { struct person people[] = { {"Tom", 1995, 2, 3}, {"Alice", 1994, 8, 12}, {"Bob", 1997, 5, 20}, {"John", 1996, 1, 1}, }; int n = sizeof(people) / sizeof(struct person); birth_sort(people, n); int i; for (i = 0; i < n; i++) { printf("%s %d-%d-%d\n", people[i].name, people[i].year, people[i].month, people[i].day); } return 0; } ``` 在这个实现中,我们首先定义了一个 `struct person` 结构体,用于存储每个公民的姓名和生日信息。然后,我们实现了一个 `compare` 函数,用于比较两个 `struct person` 结构体的年龄大小。 接着,我们使用冒泡排序的算法,实现了 `bubble_sort` 函数,用于按照生日将 `struct person` 结构体数组排序。 最后,我们实现了 `birth_sort` 函数,它直接调用了 `bubble_sort` 函数来完成排序。 在 `main` 函数中,我们定义了一个 `people` 数组,存放了四个公民的信息。然后,我们调用 `birth_sort` 函数来将它们按照生日排序,最后输出排序结果。 希望这个实现能够帮助到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alan_Lowe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值