利用分治法求一组数据中最大的两个数和最小的两位数的C语言代码
时间: 2024-10-27 07:02:57 浏览: 28
在C语言中,我们可以利用分治法的思想来解决这个问题,但是直接找到最大两个数和最小的两位数并不适合分治,因为这不需要将问题分解为更小的子问题并合并结果。不过,为了展示如何在C语言中处理这种简单的问题,我们通常会使用循环和条件判断来完成。下面是一个简单的示例:
```c
#include <stdio.h>
// 函数声明
int findMax(int arr[], int n);
int findMin(int arr[], int n);
void main() {
int data[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 12, 15}; // 输入的数据数组
int n = sizeof(data) / sizeof(data[0]);
// 找到最大值
int max1 = findMax(data, n);
printf("最大两个数中的较大值: %d\n", max1);
// 跳过已知的最大值,找次大值
for (int i = 0; i < n - 1; i++) {
if (data[i] != max1 && data[i] > data[n - 1]) {
printf("次大值: %d\n", data[i]);
break;
}
}
// 找到最小的两位数
int min10 = findMin(data, n);
printf("最小的两位数: %d\n", min10);
return 0;
}
// 分别找出数组中的最大值和最小值
int findMax(int arr[], int n) {
if (n <= 1)
return arr[0];
else
return (arr[0] > arr[1]) ? arr[0] : arr[1] + findMax(arr + 1, n - 1);
}
int findMin(int arr[], int n) {
if (n <= 1)
return arr[0];
else {
int min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] >= 10 && arr[i] < min)
min = arr[i];
}
return min;
}
}
```
阅读全文