河南省第六屆程序設計大賽——異形卵

題目鏈接地址: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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章