C语言,输入一个数量组,寻找连续几个数乘积最大的子数列,输出最大成绩和始末位置,要求数组尽可能小尽可能靠前
时间: 2024-05-06 21:20:01 浏览: 88
思路:
1. 定义变量记录最大成绩、起始位置和结束位置;
2. 循环遍历数组,记录当前连续子数列的起始位置和乘积,并使用变量记录当前最大乘积和对应的起始位置和结束位置;
3. 如果当前乘积为0,则重新记录起始位置;
4. 输出最大成绩和对应的起始位置和结束位置。
代码实现:
```c
#include <stdio.h>
int main() {
int n, i, start = 0, end = 0, max_start = 0, max_end = 0;
double max_product = 0, product = 0;
scanf("%d", &n);
double nums[n];
for (i = 0; i < n; i++) {
scanf("%lf", &nums[i]);
if (i == 0) {
product = nums[i];
max_product = nums[i];
} else {
if (product == 0) {
start = i;
product = nums[i];
} else {
product *= nums[i];
}
if (product > max_product) {
max_product = product;
max_start = start;
max_end = i;
}
}
}
printf("%.2lf %d %d", max_product, max_start + 1, max_end + 1);
return 0;
}
```
注意事项:
1. 数组元素可能为负数,因此要使用double类型存储乘积;
2. 起始位置和结束位置要加1输出,因为题目中的序号从1开始。
阅读全文