最大连续子数组和

题目

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

具体要求

(1) 请从上述两个题目中根据个人实力任选一题,要求写出可运行的完整代码提交至GitHub或者Coding.net系统中,并将代码地址附到博客内,题目(1)可以参考这篇博文
(2) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例
(3) 请利用自动测试工具对程序进行测试
(4) 请将程序运行结果和自动测试分析结果截图附到博客中

因此在阅读过《百度百科》之后选择了动态规划法,这种方法相对来讲比较简单,比较便于编程。

解题过程

动态规划法

1. 定义一个数组A[20],设输入整数个数为num,数组长度为size,并分别输入变量。定义两个变量maxTemp、maxResult,起始时使maxTemp = 0;maxResult = 0;

2. 定义变量i=0开始循环,(1)当 i < size 时。 (2)当 maxTemp >=0 时让 maxTemp = A[i] + maxTemp ;否则 maxTemp = A[i] ;(3)当maxResult > maxTemp 时使MaxResult = maxTemp;

3. 循环结束输出结果。

流程图

程序代码coding地址

测试代码coding地址


单元测试

程序的白盒测试有五种覆盖标准:语句覆盖判定覆盖条件覆盖判定/条件覆盖条件组合覆盖
使用的方法为判定/条件覆盖条件组合覆盖
覆盖标准:使得判定中的每个条件获得各种可能的结果。假设数组长度为6个.

图中条件如下:

  • (1) i < size ;
  • (2) maxTemp >= 0 ;
  • (3) maxTemp > maxResult ;

条件为以下六个条件:

  • (1) i < size ;
  • (2) i >= size ;
  • (3) maxTemp >= 0 ;
  • (4) maxTemp < 0 ;
  • (5) maxTemp > maxResult ;
  • (6) maxTemp <= maxResult ;

使用判定/条件覆盖

执行路径为A-B-C-E-F-G-H ∧ A-B-D-E-G-H;

  • 设整数个数为6个;整数为1,2,3,4,5,6;应输出的结果为21.
  • 例子包含(1),(2),(3),(5)条件;路径为:A-B-C-E-F-G-H;

  • 设整数个数为6个;整数为-1,-2,-3,-4,-5,-6;应输出的结果为0.
  • 例子包含(1),(2),(4),(6)条件;路径为:A-B-D-E-G-H;

使用条件组合覆盖

执行路径为A-B-C-E-F-G-H ∧ A-B-C-E-G-H ∧ A-B-D-G-H ∧ A-B-D-E-G-H ∧ A-B-C-E-G-H。

  • 设整数个数为6个;整数为2,13,-16,1,2,18;应输出的结果为21.
  • 例子包括(1),(2),(3),(4),(5),(6)条件;路径为:A-B-C-E-F-G-H 或 A-B-C-E-G-H 或 A-B-D-G-H 或 A-B-D-E-G-H 或 A-B-C-E-G-H。

输出错误的情况

设整数个数为7个;整数为2,13,-16,1,2,18,1;应输出的结果为22,结果输出为21,输出错误,因为整数个数与数组长度不匹配。


心得体会

这一次通过阅读《百度百科》选择了第二种方法。写完程序后发现单元测试无法输入,并且输出直接就是0!但是直接测试的结果是正确的。后来发现我把输入和输出都写在主函数中,因此程序在进行单元测试时调用类的时候,主函数中的输入和输出没有被调用,导致没有输入值和输出,结果错误!这也让我更加深刻地了解了JAVA的JUnit的单元测试的原理,调用方法和测试方法。

程序代码coding地址

测试代码coding地址


One who wants to wear the crown, Bears the crown.

软件工程第三次作业(One who wants to wear the crown, Bears the crown.)的更多相关文章

  1. 软件工程第二次作业(One who wants to wear the crown, Bears the crown.)

    小镓自述Eclipse使用及自动单元测试技术 因为本人对JAVA有一些兴趣,所以就决定用Eclipse来完成这次作业,从安装Eclipse到学习写代码,最后学会用Junit来进行单元测试.这段过程给我 ...

  2. 248&258--高级软件工程第三次作业

    0 小组成员 马帅 / 2017202110248 齐爽爽 / 2017282110258 1 项目 GitHub 地址 GitHub:https://github.com/whumashuai/QT ...

  3. 高级软件工程第三次作业 赵坤&黄亦薇

    0.小组成员 赵坤2017282110261 黄亦薇201728210260 1.项目Github地址  https://github.com/zkself/homework3 PS:建议使用chro ...

  4. test软件工程第三次作业

    零.前言 本次作业要求个人编写程序,截止日期2019年9月25日23:00. 请先阅读<构建之法>第一章至第三章的内容,并在下方作业里体现出阅读后的成果.特别是第2章中的效能分析及个人软件 ...

  5. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  6. 【软件工程第三次作业】结对编程:四则运算( Java 实现)

    1. GitHub 地址 本项目由 莫少政(3117004667).余泽端(3117004679)结对完成. 项目 GitHub 地址:https://github.com/Yuzeduan/Arit ...

  7. 软件工程(QLGY2015)第三次作业点评(含成绩)

    相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...

  8. 软件工程(GZSD2015)第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

  9. 软件工程(GZSD2015) 第三次作业提交进度

    第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...

随机推荐

  1. 第二次项目冲刺(Beta版本)2017/12/10

    一.任务分布 二.燃尽图 三.站立式会议 1.照片(再给我两分钟) 2.任务安排 四.总结 冲刺的最后一天了,时间安排的不够好,还有部分功能没有完成,大家都尽力了,我们后续会抓紧时间完成项目.

  2. 详解Web请求中的DNS域名解析

    当我们打开浏览器,输入一个URL去请求我们需要的资源,但是URL是需要解析成对应的IP地址才能与远程主机建立连接,如何将URL解析成IP就是DNS的工作范畴,即使作为开发人员,这个过程我们也感觉不到, ...

  3. BZOJ4919:[Lydsy1706月赛]大根堆(set启发式合并)

    Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质: ...

  4. 将"a"标签当bunton使用

    <a href="javascript:void(0);" style="color: red" onclick="del_product_in ...

  5. Kubernetes1.91(K8s)安装部署过程(五)--安装flannel网络插件

    node节点需要安装flannel网络插件才能保证所有的pod在一个局域网内通信,直接使用yum安装即可,版本是0.7.1. 1.安装flannel插件: 注意是2个node节点都需要安装,都需要修改 ...

  6. OpenCV——重映射、仿射变换

    #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespac ...

  7. leetcode338—Counting Bits

    Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the ...

  8. C++的命名空间的使用

    C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace. 科技发展到如今,一个系统通常都不会仅由一个人来开发完成,不同的人开发同一个系统,不可避免地 ...

  9. loadrunner中pacing设置01

    之前一直也用pacing值来调节TPS,一直觉得它和think time没啥区别.这次项目中,和同事就此展开了讨论,细细一研究发现pacing值门道还是很多的. 如下面三个图: 上图是pacing的三 ...

  10. eclipse中查看安装的所有插件,并选择性的将其卸载

    牢骚:前一段时间安装了一个将错误日志回传到邮箱的eclipse插件,安装此插件对捕获debug虽然很方便,但是也带了我不小的困扰,比如:eclipse加载速度慢.打开速度慢,有时还会引起一些异常,这不 ...