求和问题(C语言)
问题描述:
一个长度为n的序列,求其中连续m个数的和的最大值是多少?
输入:
第一行给出一个数字T,表示数组总数 (t<100)
每组数据的第一行有两个数字 n,m (0<m≤n≤1e5)
第二行有n个数字ai (0<ai<1e9)
输出:
对于每组数据,输出最大的连续m个数之和
样例输入:
2
5 2
2 5 4 1 6
8 3
3 5 8 2 1 8 9 7
样例输出:
9
24
已AC示例代码如下:
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
while(a--){
int b,c;
scanf("%d %d",&b,&c);
long long d[100002];
for(int i=0;i<b;i++){
scanf("%lld",&d[i]);
}
long long maxn=0;
long long sum=0;
for(int i=0;i<c;i++){
sum+=d[i];
maxn = sum;
}
for(int i=0;i<b-c+1;i++){
sum = sum-d[i]+d[i+c];
if(sum>maxn){
maxn = sum;
}
}
printf("%lld\n",maxn);
}
return 0;
}
题解:
1、方法:从头开始遍历,求出m个数的和,更新最大值。
2、注意点一:要使用long long 防止溢出。
3、注意点二:考虑到时间超限问题,要使用取巧方法求和——求下一个和值只需减去开头的数加上末尾后一个数。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/103356.html