问题描述:
给出n个数,求出n个数中最大连续子段和。
输入:
输入分两行,第一行为一个正整数n,第二行输入n个整数xi,
如果最大子段和为负,输出0.
2<=n<=100000,-1000<=x<=1000。
输出:
输出最大连续子段和。
样例输入:
5 1 2 -4 2 3
样例输出:
5
原因分析:
利用sum与0 的关系,来判断前面的数据是否对结果有价值,如果前面的值为负,则赋0,相当于重写开始一段子列,如果大于0则说明有价值,可以继续下去
解决方案:
#include<stdio.h>
int main()
{int n, i, j, k, x, ans, sum;scanf("%d", &n);ans = 0;sum = 0;for (i = 1;i <= n;i++){scanf("%d", &x);sum += x;if (sum > ans)ans = sum;if (sum < 0)sum = 0;}printf("%d\n", ans);return 0;
}