软件工程第三次作业

最大连续子数组和(最大子段和)

1. 题目要求

  • 给定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。引用自《百度百科》.

2.编程环境

  • 使用java语言编写,使用eclipse。

3.解题的思路

  • 从头开始累加数组的元素,初始值 sum 为 0 。假设a b c都为正整数,第一步 把 a累加, 则 sum =- a,接着累加 b , sum = -a+b,再接着 c累加 sum = -a+b+c,但是此时我们发现 sum <c ,第一个元素开始累加到第三个元素的 和 sum 比 第三个元素竟然还要小,那么我们就舍去前面的值,从第三个元素开始累加 ,此时 sum = c。就这样遍历到最后一个元素,得出最大字段的值。

4.代码的编写

  • 在主函数中完成数列个数的输入,和每个数列的值以及对子函数的调用。

  • 在子函数中根据由主函数传递的数列个数,及每个数来实现对于最大字段和值的计算。

  • 代码截图如下:

5.单元测试

  • 五种逻辑覆盖的方法有:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖。
  • 我这里采用条件覆盖,测试样例含有三种可能:

(1)数列全为正数.(2)数列全为负数。(3)数列中既有负数还有正数。

  • 单元测试如下图:

6.程序的详细代码

posted @ 2018-03-31 23:36  Mrswangling  阅读(151)  评论(0编辑  收藏  举报