输入一组数(包括负数),寻找数组中最大三个数的乘积。c语言编写
时间: 2024-10-07 19:00:33 浏览: 18
在C语言中,寻找一组数(包括负数)中最大三个数的乘积可以采用动态规划的方式。首先,你需要对数组进行排序,然后选取前三个最大的元素计算它们的乘积。下面是一个简单的步骤:
1. 定义一个函数,比如`findMaxProduct(int arr[], int n)`,接受输入数组`arr`和数组长度`n`。
2. 对数组进行排序,这里可以使用快速排序、归并排序等内置函数`qsort()`或者自定义冒泡排序等。
3. 初始化三个变量`max1`, `max2`, 和 `max3`,分别存储当前找到的最大、次大和第三大的数字。假设数组的第一个元素就是初始的大值。
4. 遍历数组,对于每个元素,如果它比`max3`大,那么更新`max3`为这个元素,同时将原来的`max3`与`max2`比较,如果`max3`原来小于`max2`,则将`max2`设置为两者中的较小者。
5. 每当遇到更大的元素,都要检查是否需要替换`max1`。
6. 最终返回`max1 * max2 * max3`作为结果。
下面是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
// 交换元素
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 找到最大三个数的乘积
long long findMaxProduct(int arr[], int n) {
if (n < 3)
return -1; // 如果只有两个或更少的元素,无法找到三个最大数
bubbleSort(arr, n);
long long maxProduct = arr[n - 1] * arr[n - 2] * arr[n - 3]; // 三个最大值相乘
return maxProduct;
}
int main() {
int numbers[] = {3, -4, 5, -6, 7, 2, -1};
int n = sizeof(numbers) / sizeof(numbers[0]);
long long result = findMaxProduct(numbers, n);
printf("最大三个数的乘积是: %lld\n", result);
return 0;
}
```