C++ 查找年龄问题。在当前疫情形势下,在医院收治的感染患者中利用分治法设 计查找病患序列中的年龄最大和最小的患者; 提示:利用递归思想的分治法思路。
时间: 2024-02-03 16:11:22 浏览: 78
可以使用分治法解决这个问题,具体思路如下:
1.将患者序列分为两部分,分别求出左半部分的最大年龄和最小年龄,以及右半部分的最大年龄和最小年龄。
2.比较左半部分的最大年龄和右半部分的最大年龄,取较大值作为当前序列的最大年龄。
3.比较左半部分的最小年龄和右半部分的最小年龄,取较小值作为当前序列的最小年龄。
4.递归地处理左半部分和右半部分,直到序列只有一个元素时返回该元素的年龄作为最大和最小值。
C++代码实现如下:
```cpp
#include <iostream>
using namespace std;
// 求解最大和最小值
void max_min_age(int a[], int left, int right, int& max_age, int& min_age) {
if (left == right) { // 序列只有一个元素
max_age = a[left];
min_age = a[left];
} else if (left + 1 == right) { // 序列只有两个元素
if (a[left] > a[right]) {
max_age = a[left];
min_age = a[right];
} else {
max_age = a[right];
min_age = a[left];
}
} else { // 序列有三个及以上元素
int mid = (left + right) / 2;
int max_age1, min_age1, max_age2, min_age2;
max_min_age(a, left, mid, max_age1, min_age1); // 处理左半部分
max_min_age(a, mid + 1, right, max_age2, min_age2); // 处理右半部分
max_age = max(max_age1, max_age2);
min_age = min(min_age1, min_age2);
}
}
int main() {
int n;
cout << "请输入患者人数:";
cin >> n;
int a[n];
cout << "请输入每位患者的年龄:" << endl;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int max_age, min_age;
max_min_age(a, 0, n - 1, max_age, min_age);
cout << "最大年龄为:" << max_age << endl;
cout << "最小年龄为:" << min_age << endl;
return 0;
}
```
阅读全文