47最⼤值
问题描述 :
为了培养明明对数学的热爱,明明的爸爸经常想出⼀些简单有趣且富有数学思想的游戏给明明玩。有⼀次,明明的爸爸在纸上写了N个数字,有正整数、负整数和0。明明的爸爸给明明⼀个范围,他可以选⼤于等于L1个且⼩于等于L2个的数字(L1≤L2),且这些数字必须是连续的。但是要求明明选出的数的和最⼤,这样说明明可能不太明⽩,于是明明爸爸就举了⼀个简单的例⼦。例如有5个数字为“1”、“2”、“3”、“4”、“5”,明明可以选择⼤于等于1个且⼩于等于2个的数字,也就是说明明可以选择1个数字,或者连续的2个数字。通过观察数字串,最后我们会选2个数字,4和5,他们的和最⼤,为9。明明明⽩爸爸的意思后,就开始玩起游戏来。但是他发现,这个游戏看似简单,其实还是有相当的难度,因为数字越多,选择数字个数范围越⼤,则题⽬越难,到后⾯明明有些不想玩了。于是明明就求助于你,请你帮他写⼀个程序,来求出和的最⼤值。明明的问题可以归结为:有N个数字,从中选择出连续的M(L1≤M≤L2)个数,求出它们之和的最⼤值。
输⼊说明 :
你写的程序要求从标准输⼊设备中读⼊测试数据作为你所写程序的输⼊数据。标准输⼊设备中有多组测试数据,每组测试数据有两⾏,每组测试数据的第⼀⾏有三个整数N(0<N≤20)、
L1、L2(0<L1≤L2≤N),N表⽰数字串中有多少个整数,L1、L2表⽰可选数字个数的范围,每组测试数据的第⼆⾏有N个整数,整数⼤⼩的绝对值都⼩于等于100,整数之间⽤⼀个空格隔开。每组测试数据与其后⼀组测试数据之间没有任何空⾏,第⼀组测试数据前⾯以及最后⼀组测试数据后⾯也都没有任何空⾏。
输出说明 :
对于每⼀组测试数据,你写的程序要求计算出⼀组相应的运算结果,并将每组运算结果作为你所写程序的输出数据依次写⼊到标准输出设备中。每组运算结果为⼀个整数,即所求的最⼤值。每组运算结果单独形成⼀⾏数据,其⾏⾸和⾏尾都没有任何空格,每组运算结果与其后⼀组运算结果之间没有任何空⾏,第⼀组运算结果前⾯以及最后⼀组运算结果后⾯也都没有任何空⾏。注:通常,显⽰屏为标准输出设备。
输⼊范例 :
4 1 2
-1 0 1 2
5 1 2
-1 -2 -3 -4 -5
输出范例 :
3
-1
思想:暴⼒⽅法按最⼩个数到最⼤个数遍历数组计算最值即可。应该还可以⽤动归优化⼀下。
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
int nums[20]={0};
int i = 0, j = 0, k = 0;
int sum = 0, maxSum = 0;
while (scanf("%d%d%d", &a, &b, &c) != EOF){
for (i = 0; i < a; i++){
scanf("%d", &nums[i]);
}
maxSum = -9999;
for (k = b; k <= c; k++){
for (i = 0; i + k - 1 <= a - 1; i++){ // 连续选k个数的最⼤值
sum = 0;
for (j = i; j < i + k; j++){
sum += nums[j];
字符串长度最大是多少
}
if (maxSum < sum){
maxSum = sum;
}
}
}
printf("%d\n", maxSum);
}
return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论