zgrx @ 2024-12-12 17:46:11
思路:看了题解的“通过把年+月+日摞成一个数字(生日数),比较生日数的大小来决定输入输出顺序”这个想法以后决定自己实现一下
为方便大家阅读我写了一些注释。
#include <bits/stdc++.h>
using namespace std;
int n;
struct Student {
string name;
int year, month, day, number;
long long sum;
}a[101];
int main() {
cin >> n;
// 输入学生的出生日期
//为了实现“如果有两个同学生日相同,输入靠后的同学先输出”我加入了一个number
for (int i = 0; i < n; i++) {
cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day;
a[i].number = n - i; // 输入顺序,靠后的值大
}
// 计算生日数sum
for (int i = 0; i < n; i++) {
a[i].sum = a[i].year * 10000 + a[i].month * 100 + a[i].day;
}
// 用sort排序
sort(a, a + n, [](const Student &x, const Student &y) {
if (x.sum != y.sum)
return x.sum < y.sum;
return x.number > y.number;
});
//最后输出
for (int i = 0; i < n; i++) {
cout << a[i].name << endl;
}
return 0;
}
by niuniudundun @ 2024-12-12 17:59:27
@zgrx
a[i].number = n - i;
by andycode @ 2024-12-12 18:03:03
@zgrx return x.number > y.number;
应改成 return x.number < y.number;
by zgrx @ 2024-12-12 23:23:49
@andycode @niuniudundun 感谢两位的修正我已经修改
把a[i].number = n - i;
直接赋值为i了 已经AC了 不知道为什么中午的时候还全RE,晚上再提交的时候就好了