利用递归思想的分治法思路,用户输入数据,查找年龄问题,在当前疫情形势下,在医院收治的感染患者中利用分治法设 计查找病患序列中的年龄最大和最小的患者的C++
时间: 2024-02-01 12:16:18 浏览: 70
以下是使用分治法查找病患序列中年龄最大和最小的患者的C++代码:
```c++
#include<iostream>
#include<cstdlib>
using namespace std;
//定义一个结构体表示病人
struct Patient {
int age; //年龄
int id; //编号
};
//比较年龄大小
bool cmpAge(Patient a, Patient b) {
return a.age < b.age;
}
//分治函数
void findMinMax(Patient *arr, int left, int right, Patient &minP, Patient &maxP) {
//如果只有一个病人,则该病人既是最小值又是最大值
if (left == right) {
minP = arr[left];
maxP = arr[left];
}
//如果有两个病人,则比较他们的年龄大小,得出最小值和最大值
else if (left + 1 == right) {
if (cmpAge(arr[left], arr[right])) {
minP = arr[left];
maxP = arr[right];
}
else {
minP = arr[right];
maxP = arr[left];
}
}
else {
int mid = (left + right) / 2;
Patient min1, max1, min2, max2;
//递归查找左半部分
findMinMax(arr, left, mid, min1, max1);
//递归查找右半部分
findMinMax(arr, mid + 1, right, min2, max2);
//合并结果,得出整个序列中的最小值和最大值
if (cmpAge(min1, min2))
minP = min1;
else
minP = min2;
if (cmpAge(max1, max2))
maxP = max2;
else
maxP = max1;
}
}
int main() {
int n; //病人数量
cout << "请输入病人数量:";
cin >> n;
Patient *arr = new Patient[n];
//输入每个病人的年龄和编号
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个病人的年龄和编号:";
cin >> arr[i].age >> arr[i].id;
}
//查找最小值和最大值
Patient minP, maxP;
findMinMax(arr, 0, n - 1, minP, maxP);
//输出结果
cout << "年龄最小的病人是:" << minP.id << "," << minP.age << "岁" << endl;
cout << "年龄最大的病人是:" << maxP.id << "," << maxP.age << "岁" << endl;
return 0;
}
```
运行程序后,用户可以输入病人的数量和每个病人的年龄和编号。程序会使用分治法查找病患序列中的年龄最大和最小的患者,并输出结果。
阅读全文