急!!!! C语言问题:求出数组中长度为len的子序列的和的最大值,并将该子序列输出。
输入一组整型数据,输入遇0时结束,然后输入子序列长度len(假设输入len合法),求出数组中长度为len的子序列的和的最大值,并将该子序列输出。输出效果1:请输入不超过2...
输入一组整型数据,输入遇0时结束,然后输入子序列长度len(假设输入len合法),求出数组中长度为len的子序列的和的最大值,并将该子序列输出。
输出效果1:
请输入不超过20个整数,用空格隔开,以0结束:
11 69 1 77 21 88 27 5 92 1 0
请输入子序列的长度:4
和最大的子序列为:77 21 88 27
其和为:213
请按任意键继续. . .
输出效果2:
请输入不超过20个整数,用空格隔开,以0结束:
11 69 1 77 22 81 9 12 55 0
请输入子序列的长度:3
和最大的子序列为:77 22 81
其和为:180 展开
输出效果1:
请输入不超过20个整数,用空格隔开,以0结束:
11 69 1 77 21 88 27 5 92 1 0
请输入子序列的长度:4
和最大的子序列为:77 21 88 27
其和为:213
请按任意键继续. . .
输出效果2:
请输入不超过20个整数,用空格隔开,以0结束:
11 69 1 77 22 81 9 12 55 0
请输入子序列的长度:3
和最大的子序列为:77 22 81
其和为:180 展开
2个回答
展开全部
#include <stdio.h>
#define N 20
int main( )
{
int input[N];
int i, j, index = 0, len;
int sum = 0, max = 0;
for(i = 0; ; i++)
{
scanf("%d", &input[i]);
if(input[i] == 0)
break;
}
scanf("%d", &len);
for(j = 0; j < len; j++)
sum += input[j];
max = sum;
for(j = 1; j < i-len; j++)
{
sum = (sum-input[j-1]+input[j-1+len]);
if(max < sum)
{
max = sum;
index = j;
}
}
printf("和最大的子序列为:");
for(i = index; i < index+len; i++)
printf("%d ", input[i]);
printf("\n其和为:%d", max);
return 0;
}
追问
可以大概说下思路吗
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询