河南省第六届程序设计大赛——异形卵

来源:互联网 发布:java string 编码方式 编辑:程序博客网 时间:2024/03/29 20:40

题目链接地址:http://acm.nyist.net/JudgeOnline/problem.php?cid=281&cpid=24


题意:这个题应该比较好理解,给出一个整数串和一个长度L,然后求ai+ai+1+…+ai+L-1的最大值,如果大于0输出其起始位置,小于0则输出0;简单理解就是每次求长度为L个数字的和,判断是否为最大值,输出最大值一组的起始位置,如果和小于0,则输出0


理解点:每一次求长度为L个数字的和,注意最后一次的求和的起始位置和每一次求和的结束位置


代码解释:

#include <iostream>
using namespace std;
int main()
{
int x;
cin>>x;  //多组输入
while(x--)
{
int l,n, i,j,t,sum,max=-1;
int a[1001];
cin>>l>>n;
for(i=1;i<=n;i++) //输入整数串
{
cin>>a[i];
}
for(i=1;i<=n-l+1;i++) //由于长度为l,最后一组循环起始位置为n-1+1
{
sum=0;            
for(j=i;j<=i+l-1;j++) //每l个一组进行求和,找出最大值,注意每组的起始和结束位置
{
sum=sum+a[j];
}
if(sum>max) //如果大于当前最大值,则交换值并记录起始位置
{
max=sum;
t=i;
}

if(max<0) //如果max小于0则说明没有适合的寄生环境,输出0,否则输出起始位置
cout<<0<<endl;
else
cout<<t<<endl;
}
return 0;
}

0 0
原创粉丝点击