最大连续子数组和

题目

给定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. win10的ie11正确卸载与重新安装

    win10的ie11是自带与斯巴达共存的浏览器,不正确的卸载或安装可能会导致不可预知的问题,以下为我总结出来正确的方法: 卸载: 进入 控制面板--程序与功能 之后在左侧选择 “启动与关闭Window ...

  2. 【汇编】SI DI 的用法

    一.汇编语言中,为什么SI和DI不能同时使用汇编 其实你可以想一下,这两个寄存器的意思,SI源变址寄存器,DI目地变址寄存器,既然是变址寄存器,那么他们肯定是在某个地址的基础上进行偏移变化,由此我们就 ...

  3. 阿里云朱照远: AI打开新视界 8K时代已来!

    2018年4月11-12日,2018亚太CDN峰会在北京隆重召开,大会由亚太CDN领袖论坛.电视云论坛.短视频论坛.视频云论坛.新技术论坛.运营商论坛.国际云论坛等7大部分组成.在亚太CDN领袖峰会上 ...

  4. Windows下文件检索的基本姿势

    要点 使用FindFirstFile和FindNextFile两个WindowsAPI,并配合链表或队列存储文件夹序列. C++源码(链表存储) #include <iostream> # ...

  5. 乘风破浪:LeetCode真题_032_Longest Valid Parentheses

    乘风破浪:LeetCode真题_032_Longest Valid Parentheses 一.前言 这也是非常有意思的一个题目,我们之前已经遇到过两个这种括号的题目了,基本上都要用到堆栈来解决,这次 ...

  6. SHGetFileInfo 报错 异常 问题

    查看代码是否使用了 ::CoInitializeEx(NULL, COINIT_MULTITHREADED); 如果是,换成在每个线程调用 ::CoInitialize(NULL); 真够蛋疼的,查了 ...

  7. 11.SolrCloud集群环境搭建

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 我们基于Solr4.10.3版本进行安装配置SolrCloud集群,通过实践来实现索引数据的分布存储和检索. ...

  8. python第三十六课——1.可迭代对象

    1.可迭代对象: 满足前提: 只要能被循环操作的对象,就可以可迭代对象 举例: str.list.tuple.set.dict.range.generator... 高效的检测一个对象是否是可迭代对象 ...

  9. vagrant特性——基于docker开发环境(docker和vagrant的结合)-2-命令

    Docker Commands Docker provider公开了一些额外的vagrant命令,这些命令对于与Docker容器交互非常有用.这有助于你在vagrant之上的工作流程,这样你就可以在底 ...

  10. lua-resty-gearman模块

    粘贴一段百度对gearman的解释: Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统. lu ...