算法--求出子序列中最大的和

实验楼作业

输入一组整数,求出这组数字子序列和中的最大值,只要求出子序列中最大的和,不必求出最大值对应的序列。
最大子序列和:整数序列A1, A2,... An (可能有负数),求A1An的一个子序列AiAj,使得Ai到Aj的和最大。
例如:
序列:2,2,-3,4,5,6。则最大子序列和为15。

代码实现

#include <stdio.h>

int main()
{
    int serial[] = {1,2,-3,4,5};//输入的序列
    int max_sum = 0;//子序列的最大的和
    int w,n;//w是外层循环,自子序列的第一个值;n是内层循环,在w的基础上加n,serial[w+n]就是子序列的第n个值
    for(w=0;w<5;w++)//外层循环,数组每个元素都做一次子序列头
    {
        int msum = 0;//临时变量,每个子序列的和
        for(n=0;n+w<5;n++)//在子序列的最后一个值,不超过数组最大下标时,就可以一直自加求和
        {
            msum += serial[w+n];
            
        }
        if(msum > max_sum)//如果有子序列和比之前的大,那就挑出最大的来
        {
            max_sum = msum;
        }
    }
    printf("the max_sum is %d",max_sum);//输出结果
   return 0;
}

运算结果

the max_sum is 9

总结感悟

说实话,自从工作以来,从未认真对待过算法与数据结构,入行半年多了,到9月的话算一整年。
算法与数据结构必须补上来。
今天是一个开始,万事开头难,只要开始了坚持下去,积分的力量你懂得。
上面的话很俗套,但是确为肺腑之言,我也明白了,为什么这么俗套的话,我们却经常看见有人提起
那正是因为,心中所感,是然。

猜你喜欢

转载自www.cnblogs.com/houser0323/p/11001360.html