【C】最大子列和问题

来源:互联网 发布:业务数据分析师要求 编辑:程序博客网 时间:2024/06/05 15:33

这里写图片描述
这里写图片描述
程序代码:

#include<stdio.h>#define MAX 100000long long maxSeq(int num[],long long n){    long long tmp=0,max=0;    long long i=0;    for(i=0;i<n;i++)    {        if(tmp < 0)            tmp = num[i];        else            tmp+=num[i];        if(max<tmp)            max=tmp;    }     return max; }int main(){    long long n,i=0;    int  num[MAX];    scanf("%lld",&n);    for(;i<n;i++)        scanf("%lld",&num[i]);    long long m=maxSeq(num,n-1);    if(m>0)        printf("%lld",m);    else        printf("0");    return 0;}

思路解析:
从数组的第一个元素开始,往后累加,a0、a0+a1、a0+a1+…+ax每循环一次,比较前n项的序列和与max的大小,更新max的值。如果前n项和小于0,则抛弃该序列,从第n+1项开始累加,重复上述过程,知道所有元素遍历一次。得到的max即为最大序列和。
运行结果:
这里写图片描述

0 0
原创粉丝点击