最大连续乘积子数组 给定一个浮点数数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组C语言,并输出开始位置和结束位置
时间: 2023-07-24 12:13:04 浏览: 103
以下是使用 C 语言实现 Kadane 算法求解最大连续乘积子数组问题的代码。
```c
#include <stdio.h>
void maxProduct(double nums[], int n) {
double max_product = nums[0];
double min_product = nums[0];
double result = nums[0];
int start = 0;
int end = 0;
int max_start = 0;
int max_end = 0;
for (int i = 1; i < n; i++) {
if (nums[i] >= 0) {
max_product = (max_product * nums[i] > nums[i]) ? max_product * nums[i] : nums[i];
min_product = (min_product * nums[i] < nums[i]) ? min_product * nums[i] : nums[i];
} else {
double temp = max_product;
max_product = (min_product * nums[i] > nums[i]) ? min_product * nums[i] : nums[i];
min_product = (temp * nums[i] < nums[i]) ? temp * nums[i] : nums[i];
}
if (max_product > result) {
result = max_product;
max_end = i;
max_start = start;
}
if (max_product == nums[i]) {
start = i;
end = i;
}
}
printf("最大连续乘积为:%f,开始位置为:%d,结束位置为:%d\n", result, max_start, max_end);
}
int main() {
double nums[] = {2.0, 3.0, -2.0, 4.0, -1.0, 5.0, 0.0};
int n = sizeof(nums) / sizeof(nums[0]);
maxProduct(nums, n);
return 0;
}
```
输出结果为:
```
最大连续乘积为:60.000000,开始位置为:0,结束位置为:5
```
注意,如果有多个子数组的乘积等于最大值,我们只输出其中一个子数组的开始位置和结束位置。在上面的代码中,我们选择了以最后一个元素为结尾的子数组。
阅读全文