之前一直错误,没有考虑到的点:
1、和最大的字串不一定从1开始,因为有前几个数都是负数的情况。
处理方式:将sum清零,temp的值往后移动一位。当然Max的值是不变的。如果之后sum会大于Max,就设置start和end。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int T;
cin>>T;
int start=0;
int endd=0;
int num;
int c=1;
while(T--)
{
int temp=1;
int N;
cin>>N;
int Max=-1001;//用来记录最大值
int sum=0;//用来记录和
int i;
for(i=0;i<N;i++)
{
cin>>num;
sum+=num;
if(sum>Max)
{
Max=sum;
start=temp;
endd=i+1;
}
if(sum<0)
{
sum=0;
temp=i+2;
}
}
cout<<"Case "<<c++<<":"<<endl<<Max<<" "<<start<<" "<<endd<<endl;
if(T!=0) cout<<endl;
}
return 0;
}