题目描述 病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序: 1.老年人(年龄 >= 60岁)比非老年人优先看病。 2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。 3.非老年人按登记的先后顺序看病。 输入 第1行,输入一个小于100的正整数,表示病人的个数; 后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。 输出 按排好的看病顺序输出病人的ID,每行一个。 样例输入 5 021075 40 004003 15 010158 67 021033 75 102012 30 样例输出 021033 010158 021075 004003 102012 用C++语言解答这道题
时间: 2024-04-24 07:21:25 浏览: 142
以下是用C++语言解答这道题的代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
struct Patient {
std::string id;
int age;
};
bool comparePatients(const Patient& p1, const Patient& p2) {
if (p1.age >= 60 && p2.age >= 60) {
return p1.age > p2.age;
}
else if (p1.age >= 60 && p2.age < 60) {
return true;
}
else if (p1.age < 60 && p2.age >= 60) {
return false;
}
else {
return false;
}
}
int main() {
int numPatients;
std::cin >> numPatients;
std::vector<Patient> patients;
for (int i = 0; i < numPatients; i++) {
Patient patient;
std::cin >> patient.id >> patient.age;
patients.push_back(patient);
}
std::sort(patients.begin(), patients.end(), comparePatients);
for (const auto& patient : patients) {
std::cout << patient.id << std::endl;
}
return 0;
}
```
这段代码首先读取输入的病人个数,并创建了一个 `patients` 的向量来存储病人信息。然后使用一个 `for` 循环读取每个病人的ID和年龄,并将其添加到 `patients` 向量中。
接下来,使用 `std::sort` 函数对 `patients` 向量进行排序,使用自定义的比较函数 `comparePatients`。这个比较函数根据题目要求,首先比较年龄,如果两个病人都是老年人,则按年龄从大到小排序;如果其中一个病人是老年人而另一个不是,则老年人优先;如果两个病人都不是老年人,则按照登记的先后顺序排序。
最后,使用一个 `for` 循环遍历排序后的 `patients` 向量,并输出每个病人的ID。
希望能对你有所帮助!如有任何疑问,请随时提问。
阅读全文