写在开头:我有一大把努力的理由,却找不到任何一个理由不努力。
一.题目要求:
给定n个整数,(可能为负数)组成的序列a[1],a[2],a[3],......a[n],求该序列如a[i]+a[i+1]+...+a[j]的子段和最大值,当所给的数均为负数时,子段和为0,依此定义,所求的最优值为Max{0,a[i]+a[i+1]+...+a[j]}1<=i<=j<=n。
二.思路分析:
首先我们定义一个变量csum,用循环结构计算前i项和,和每一次都会更改,变量值每一次也都会更改,如果出现了csum<0,就没有再加下去的必要,这时我们将第i+1项重新赋给csum。
我们还需要定义一个变量max,每次改变csum的值,我们都需要将max和csum进行比较,如果csum大于max,将csum值赋给max。
三.代码编写:
代码截图如图所示:
详细代码地址如下:代码看这里
四.代码测试:
1.几种覆盖方式比较
语句覆盖:语句覆盖是最基本的覆盖方法,使程序中的每一条语句至少被执行一次;
判定覆盖:设计足够的测试用例,使每个判定至少一个为真,一个是假;
条件覆盖:使每一个条件获得各种可能的结果,使每一次条件至少有一个为真值,有一个为假值。
条件判定覆盖:使得判定中每个条件的所有可能结果至少出现一次,每个判定本身所有可能结果也至少出现一次。
组合覆盖:每个判定中条件组合的结果至少出现一次。
本题选取的覆盖方式:条件组合覆盖
2.设计测试用例:
(1)当数组长度为0时:例如array[]={};理论结果max=0;
(2)当数组长度不为0时,如果出现连续数组段和小于0(csum<0),则重新给和赋值为下一个元素;
例如array[]={-1,-3,-5,-7,8,9,10},因为array[1]+array[2]+array[3]=-13<0,所以将和重新赋值为下一个元素,即csum=8;该样例理论结果max=27;
(3)如果没有出现csum<0的情况:则进行顺序相加;例如:array[]={3,2,-1,8,7,9}
理论结果为max=28;
3.测试结果:
截图如图所示:
五.心得体会:
感谢软件工程,让我意识到,自己独立解决问题的能力还差很多,也明确了自己接下来需要努力的方向,作为一名合格的程序员,所要必备的素质----独立自主的解决问题,我还有很长的路要走;
六.写在结尾的碎碎念
如果你不是天赋异禀,那么你想要的东西,只能靠自己跳起来去抢。作为一个女程序员,在每一个不撒娇不示弱的关头,都会自力更生,火力全开的向前冲,我们不会撒娇,但是我们只会越来越强。