6 -2 11 -4 13 -5 -2 10 -10 1 2 3 4 -5 -23 3 7 -21 6 5 -8 3 2 5 0 1 10 3 -1 -5 -2 3 -1 0 -2 0
20 11 13 10 1 4 10 3 5 10 10 10 0 -1 -2 0 0 0Huge input, scanf is recommended.HintHint
#include <cstdio>
#include <cstring>
int a[10005];
int main()
{
int n;
while(scanf("%d", &n) != EOF && n)
{
int get, cur = 0, ma = -1, j = 0, st = 0, ed = n - 1;
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
cur += a[i];
if(cur > ma)
{
ma = cur;
ed = i; //结束位置下标
st = j; //开始位置下标
}
if(cur < 0)
{
cur = 0;
j = i + 1; //cur < 0则从i + 1开始另起一段区间
}
}
if(ma < 0)
ma = 0;
printf("%d %d %d\n", ma, a[st], a[ed]);
}
}原文:http://blog.csdn.net/tc_to_top/article/details/44651087