程序分析
1、sum连续加后一个数,只要sum是大于等于0的,则不改变start位置,同时记录这个过程中的最大值。
2、sum加到小于0后,start应该为下一个数的位置,此时sum清0,开始加。
3、重复上述步骤(即遍历一次输入的数即可完成)
代码实现
#include<iostream>
using namespace std;
int num[100005];
int main(){
int t,n,m,i;
cin>>t;
for(i = 1;i <=t;i++){
int start = 1,end,sum = 0,ans = -INT_MAX,temp= 1;
cin>>n;
//输入
for(int j = 1;j <= n;j++)
cin>>num[j];
//核心代码
for(int k = 1;k <=n;k++){
if(sum >= 0)
sum += num[k];
else{
sum = num[k];
temp = k;
}
if(sum > ans){
ans = sum;
start = temp;
end = k;
}
}
//输出
cout<<"Case "<<i<<":\n";
cout<<ans<<" "<<start<<" "<<end<<endl;
if(i!=t)
cout<<endl;
}
return 0;
}