Case 2: 7 1 6
题目要我们输出的三个数分别表示:最大和的子序列,(就是一个序列取它连续的一段数,要求和最大)、最大和的子序列的开始位置、最大和的子序列的最后位置,比如第一个例子:5 6 -1 5 4 -7 最大和的子序列是:6+-1+5+4=14;开始位置是1;最后位置是4;再举个例子:3 -1 2 3 最大和的子序列是:2+3=5;开始位置是2;最后位置是3
#include<stdio.h>
int main()
{
int n,m,t,i,j;
scanf("%d",&t);
int num=1;
while(t--)
{
int max=-9999;
int sum=0;
int begin=1,end=1,x=1;
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&m);
sum+=m;//记录最大连续和的值
if(sum>max)
{
max=sum;
begin=x;//记录开始于第几个数
end=i+1;//记录结束于第几个数
}
if(sum<0)//都是负数的情况
{
x=i+2;//注意:这时候是从下一个输入的数开始计算
sum=0;
}
}
if(num!=1)
printf("\n");//注意输出格式
printf("Case %d:\n",num++);
printf("%d %d %d\n",max,begin,end);
}
return 0;
}