用c语言写一个程序,从键盘输入一组数据,利用分治法求一组数据中最大的两个数和最小的两个数。不使用向量
时间: 2024-11-12 08:42:14 浏览: 13
求一组数组的两个最大值和两个最小值 分治法
4星 · 用户满意度95%
在C语言中,你可以使用数组和指针结合分治思想来实现这个需求。这里是一个简单的示例程序:
```c
#include <stdio.h>
// 函数声明
void swap(int *a, int *b); // 交换两个整数
void find_max_two(int arr[], int low, int high, int *max1, int *max2);
void find_min_two(int arr[], int low, int high, int *min1, int *min2);
int main() {
int n;
printf("请输入数组元素的数量: ");
scanf("%d", &n);
int arr[n]; // 存储输入的数组
for (int i = 0; i < n; i++) {
printf("请输入第%d个数: ", i + 1);
scanf("%d", &arr[i]);
}
int max1, max2, min1, min2; // 初始化最大值和最小值
max1 = min1 = arr[0];
max2 = min2 = arr[1];
// 遍历数组找到最大、第二大的和最小、第二小的数
for (int i = 2; i < n; i++) {
if (arr[i] > max1) {
swap(&max2, &max1);
max2 = arr[i];
} else if (arr[i] > max2 && arr[i] != max1) {
max2 = arr[i];
}
if (arr[i] < min1) {
swap(&min2, &min1);
min2 = arr[i];
} else if (arr[i] < min2 && arr[i] != min1) {
min2 = arr[i];
}
}
printf("最大两个数是: %d 和 %d\n", max1, max2);
printf("最小两个数是: %d 和 %d\n", min1, min2);
return 0;
}
// 交换函数
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
在这个程序中,我们首先获取用户输入的数组元素,然后通过遍历数组,使用分治的思想分别找出最大和最小的两个数。注意这里并没有使用向量,而是直接操作数组元素。
阅读全文