最大子列问题

最大子列问题

思路:
1.定义ThisSum和MaxSum两个变量
2.用ThisSum存储遍历数组的和
3.如果ThisSum>MaxSum,则最大和变为ThisSum,将ThisSum赋值MaxSum
4.如果ThisSum<0,则舍去,ThisSum=0

代码实现:

#include<stdio.h>
int main()
{
    int N;
    while(scanf("%d",&N) != EOF)
    {
        int a[10000];
        int ThisSum = 0,MaxSum = 0;
        int i;
        for (i=0;i<N;i++)
            scanf("%d",&a[i]);	//输入数组
        for (i=0;i<N;i++)
        {
            ThisSum += a[i];	//遍历求和
            if (ThisSum > MaxSum)//如果ThisSum > MaxSum,则最大和变为ThisSum
            {
                MaxSum = ThisSum;
            }
            else if (ThisSum < 0)	//当ThisSum <0,则舍去ThisSum,因为最大和不可能为ThisSum
            {
                ThisSum = 0;
            }
        }
        printf("%d\n",MaxSum);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43557810/article/details/86776348
今日推荐