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