分别写出求两个数中的较大数,三个数中的最大数的函数模版max1
时间: 2024-05-15 10:13:10 浏览: 8
```c++
// 求两个数中的较大数
template<typename T>
T max1(T a, T b) {
return a > b ? a : b;
}
// 求三个数中的最大数
template<typename T>
T max1(T a, T b, T c) {
return max1(max1(a, b), c);
}
```
使用示例:
```c++
int a = 2, b = 3, c = 4;
cout << max1(a, b) << endl; // 输出 3
cout << max1(a, b, c) << endl; // 输出 4
double x = 1.5, y = 2.5, z = 3.5;
cout << max1(x, y) << endl; // 输出 2.5
cout << max1(x, y, z) << endl; // 输出 3.5
```
相关问题
用c写一个求三个数中两个最大数之和用if语句
```
#include <stdio.h>
int main() {
int a, b, c;
int max1, max2, sum;
printf("请输入三个数:\n");
scanf("%d%d%d", &a, &b, &c);
if (a > b) {
max1 = a;
max2 = (b > c) ? b : c;
} else {
max1 = b;
max2 = (a > c) ? a : c;
}
sum = max1 + max2;
printf("两个最大数之和为:%d\n", sum);
return 0;
}
```
用分治法求一组数据中最大的两个数
好的,这是一个经典的分治法问题。我们可以使用类似于归并排序的思路来解决它。
具体步骤如下:
1. 将数据分为两半,分别在左半边和右半边递归寻找最大的两个数。
2. 比较左半边和右半边找到的最大两个数,得到整个数据集中的最大两个数。
3. 在左半边找到比右半边最大的数还要大的数,以及在右半边找到比左半边最大的数还要大的数。这两个数就是整个数据集中第二大的两个数。
代码实现如下(假设数据集为 nums):
```
def find_largest_two(nums):
n = len(nums)
if n == 1:
return nums[0], float('-inf')
left_max, left_second_max = find_largest_two(nums[:n//2])
right_max, right_second_max = find_largest_two(nums[n//2:])
if left_max >= right_max:
max1, max2 = left_max, max(right_second_max, right_max)
else:
max1, max2 = right_max, max(left_second_max, left_max)
for num in nums:
if num > max1:
max2 = max1
max1 = num
elif num > max2:
max2 = num
return max1, max2
```
这个函数的时间复杂度为 O(nlogn),因为每次递归都会将数据量减半,而最后还需要遍历一遍整个数据集。