最大数组段求和

本次选择的题目为:最大连续子数组和(最大子段和)

问题简介及要求

背景

问题: 给定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
例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
-- 引用自《百度百科》

要求

从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中,任选一个标准设计测试用例并利用自动测试工具对程序进行测试

算法分析及程序设计

介绍程序的白盒测试有五种覆盖标准:
  • 语句覆盖,它的含义是我们设计出来的测试用例要保证程序中的每一个语句至少被执行一次。
  • 判定覆盖,也被成为分支覆盖,也就是说设计的测试用例要保证让被测试程序中的每一个分支都至少执行一次。
  • 条件覆盖,要求所设计的测试用例能使每个判定中的每一个条件都获得可能的取值,即每个条件至少有一次真值、有一次假值。
  • 判定/条件覆盖,就是我们设计的测试用例可以使得判断中每个条件所有的可能取值至少执行一次(条件覆盖),同时每个判断本身所有的结果也要至少执行一次(判定覆盖)。不难发现判定条件覆盖同时满足判定覆盖和条件覆盖,弥补了两者各自的不足,但是判定条件覆盖并未考虑条件的组合情况。
  • 条件组合覆盖,设计的测试用例应该使得每个判定中的各个条件的各种可能组合都至少出现一次。显然,满足条件组合覆盖的测试用例一定是满足判定覆盖、条件覆盖和判定条件覆盖的。
  • 路径覆盖,意思是说我们设计的测试用例可以覆盖程序中所有可能的执行路径。比前面的五种方法覆盖度都要高,但是由于需要对所有可能的路径全部进行覆盖,那么我们需要设计数量非常巨大的而且较为复杂的测试用例,用例数量将呈现指数级的增长,可操作性不强。

  分析本次的题目内容,我采用判定条件覆盖来完成。

满足以下覆盖情况:

判定一:i<6;i>=6

判定二:b>0;b<=0

判定三:sum < b ;sum>=b

求解最大字段和,令S=M=0。M存放前i-1个数据的最大和,S用来存放每一次前i个数据的和。若M<0,则M等于当前数,若计算到最后一个仍然为负数,则M=0;令M与S进行比较,若S>M,则M=S。

流程图如图所示:
1343622-20180401192257436-506553864.png
代码如下:https://git.coding.net/cossoc/1111111.git

测试示例

仍然沿用codeblocks进行测试,测试如图:
1343622-20180401192833990-537661495.png

总结

  本次的实验我用的这个思想我觉得还是蛮简单的,本次的测试也仍然沿用上一次codeblocks的测试,可是不知为何,实验的过程居然很坎坷,代码思想有了,实践起来不容易啊,越简单的事情吧,越要认真啊,耐心、冷静真的太重要了,在重新配置的过程中总是出错,弄的弄的自己都晕了,然后很烦躁,停滞不前,最后还是要心平气和对它啊,最后才写完啊,表示心累,觉得自己有必要多学习多熟悉熟悉,否则以后也闹心啊。

转载于:https://www.cnblogs.com/cyf-07/p/8687864.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值