c语言编写程序找出序列的最大子段和,以及子段的起始位置和结束位置。例如:输入数组(6,-1,5,4,-7),输出14, 1, 4,其中14表示最大子段和,1表示和最大的子段从第1个数字开始,4表示和最大的子段到第4个数字结束。
时间: 2024-05-07 07:15:59 浏览: 109
```c
#include <stdio.h>
int main()
{
int n;
printf("请输入序列的长度:");
scanf("%d", &n);
int a[n];
printf("请输入序列中的数:");
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
int max_sum = a[0], max_start = 0, max_end = 0;
int cur_sum = 0, cur_start = 0;
for(int i = 0; i < n; i++)
{
cur_sum += a[i];
if(cur_sum > max_sum)
{
max_sum = cur_sum;
max_start = cur_start;
max_end = i;
}
if(cur_sum < 0)
{
cur_sum = 0;
cur_start = i + 1;
}
}
printf("最大子段和为:%d\n", max_sum);
printf("子段的起始位置为:%d\n", max_start + 1);
printf("子段的结束位置为:%d\n", max_end + 1);
return 0;
}
```
阅读全文