思路
首先按照题目的意思进行输入各种数据。
核心:求子列和,然后再判断大小,若小于0,则first为当前元素下标+1
源码
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n;
int a[100000];
int g=1;
cin>>n;
while(n--){
int sum=0; //用来计算最大值
int max1=-1001;
int first=1,last=1,flag=1;
cin>>a[0];//a[0]来存放数组元素的个数
for(int i=1;i<=a[0];i++){
cin>>a[i];
sum+=a[i];
if(sum>max1){
max1=sum;
first=flag;
last=i;
}
if(sum<0){ //如果小于0,则起始位置变成当前元素的下一个元素
sum=0;
flag=i+1;
}
}
printf("Case %d:\n",g++);
printf("%d %d %d\n",max1,first,last);
if(n>0)
printf("\n");
}
return 0;
}