查找年龄问题。在当前疫情形势下,在医院收治的感染患者中利用分治法设 计查找病患序列中的年龄最大和最小的患者; 提示:利用递归思想的分治法思路。c++
时间: 2024-02-06 09:13:00 浏览: 73
快速排序 分治法——C++代码
以下是使用分治法递归查找病患年龄最大和最小值的 C++ 代码示例:
```c++
#include <iostream>
using namespace std;
// 定义一个结构体表示患者信息
struct Patient {
int age;
string name;
};
// 定义一个函数用于分治查找最大和最小年龄的患者
void findMinMaxAge(Patient* patients, int start, int end, Patient& minAgePatient, Patient& maxAgePatient) {
if (start == end) {
minAgePatient = patients[start];
maxAgePatient = patients[start];
return;
}
if (start + 1 == end) {
if (patients[start].age < patients[end].age) {
minAgePatient = patients[start];
maxAgePatient = patients[end];
} else {
minAgePatient = patients[end];
maxAgePatient = patients[start];
}
return;
}
int mid = (start + end) / 2;
Patient minAgePatient1, maxAgePatient1, minAgePatient2, maxAgePatient2;
findMinMaxAge(patients, start, mid, minAgePatient1, maxAgePatient1);
findMinMaxAge(patients, mid + 1, end, minAgePatient2, maxAgePatient2);
if (minAgePatient1.age < minAgePatient2.age) {
minAgePatient = minAgePatient1;
} else {
minAgePatient = minAgePatient2;
}
if (maxAgePatient1.age > maxAgePatient2.age) {
maxAgePatient = maxAgePatient1;
} else {
maxAgePatient = maxAgePatient2;
}
}
int main() {
int n;
cout << "请输入患者数量:" << endl;
cin >> n;
Patient* patients = new Patient[n];
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "位患者的姓名和年龄:" << endl;
cin >> patients[i].name >> patients[i].age;
}
Patient minAgePatient, maxAgePatient;
findMinMaxAge(patients, 0, n - 1, minAgePatient, maxAgePatient);
cout << "年龄最小的患者是:" << minAgePatient.name << ",年龄为:" << minAgePatient.age << endl;
cout << "年龄最大的患者是:" << maxAgePatient.name << ",年龄为:" << maxAgePatient.age << endl;
delete[] patients;
return 0;
}
```
在上述代码中,我们首先定义了一个用于表示患者信息的结构体 `Patient`,其中包含患者的姓名和年龄两个属性。然后我们定义了一个递归函数 `findMinMaxAge`,该函数通过分治法的思路将患者序列分成两个部分,递归地查找每个部分的最大和最小年龄的患者,最后将两个部分的结果合并得到最终的结果。
在 `main` 函数中,我们首先读入患者数量和每个患者的姓名和年龄信息,然后调用 `findMinMaxAge` 函数查找年龄最大和最小的患者,并输出结果。
阅读全文