【题目描述】
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
老年人(年龄≥6060 岁)比非老年人优先看病。
老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
非老年人按登记的先后顺序看病。
【输入】
第 1 行,输入一个小于 100100 的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于 1010 的字符串表示病人的 ID(每个病人的 ID 各不相同且只含数字和字母),一个整数表示病人的年龄(不超过100100 岁),中间用单个空格隔开)。
【输出】
按排好的看病顺序输出病人的 ID,每行一个。
【输入样例】
5
021075 40
004003 15
010158 67
021033 75
102012 30
【输出样例】
021033
010158
021075
004003
102012
源代码: #include <iostream> #include <algorithm> #include <string> using namespace std; struct Patient { string id; int age; int order; }; bool cmp(Patient a, Patient b) { if (a.age >= 60 && b.age >= 60) { if (a.age == b.age) return a.order < b.order; return a.age > b.age; } else if (a.age >= 60) return true; else if (b.age >= 60) return false; else return a.order < b.order; } int main() { int n; cin >> n; Patient patients[n]; for (int i = 0; i < n; i++) { cin >> patients[i].id >> patients[i].age; patients[i].order = i; } sort(patients, patients + n, cmp); for (int i = 0; i < n; i++) { cout << patients[i].id << endl; } return 0; }