C++:
#include<iostream>
#include<vector>
using namespace std;
void maxSum();
int main()
{
int T=0;
cin>>T;
if(T<1||T>20)return 0;
for(int i=0;i<T;i++)
{
cout<<"Case "<<(i+1)<<":"<<endl;
maxSum();
if(i<T-1)cout<<endl;
}
cin>>T;
return 0;
}
void maxSum()
{
int N=0;
int data=0;
long int sum=0;
vector<int> temp;
cin>>N;
if(N<1||N>100000)return;
for(int i=0;i<N;i++)
{
cin>>data;
if(-1000<=data<=1000)
{
temp.push_back(data);
}
else return;
}
int begin=0;
int end=0;
int presentBegin=0;//当前起始点
int max=temp[0];
for(int j=0;j<temp.size();j++)
{
sum+=temp[j];
if(sum>=0)//=0是输出第一个满足条件的子数组的条件
{
if(sum>max){max=sum;begin=presentBegin;end=j;}
}
else{
if(sum>max){max=sum;begin=presentBegin;end=j;}
presentBegin=j+1;sum=0;
}
}
cout<<max<<" "<<(begin+1)<<" "<<(end+1)<<endl;
}
C:
#include<stdio.h>
int main()
{
int j,n,t,i,sum[100001],f[100001],max,flag1,flag2;
scanf("%d",&n);
for(j=1;j<=n;j++)
{
printf("Case %d:\n",j);
scanf("%d",&t);
for(i=0;i<t;i++)
scanf("%d",&f[i]);
sum[0]=f[0];
max=f[0];
flag1=0;
flag2=0;
for(i=1;i<t;i++)
{
if(sum[i-1]>=0)
{
sum[i]=sum[i-1]+f[i];
if(sum[i]>max)
{
flag1=i;
max=sum[i];
}
}
else
{
sum[i]=f[i];
if(sum[i]>max)
{
max=sum[i];
flag1=i;
}
}
}
for(i=flag1;i>=0;i--)
if(sum[i]<0)
break;
if(max>=0)
printf("%d %d %d\n",max,i+2,flag1+1);
else
printf("%d %d %d\n",max,i+1,flag1+1);
if(j!=n)
printf("\n");
}
return 0;
}