软件工程作业-(third)
1.选题目(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.程序设计和代码
2.1GITHUB代码地址https://github.com/Lpofeng/find_max_add.git
2.2程序流程图
此次采用判定/条件覆盖


2.3核心代码
int find_max_add(vector<int> vec, const int size, int* start, int* end)
{
if (size == 0)
return -100;
int final_max = vec[0]>0?vec[0]:0;
if (size != 1) {
int cur_start = 0;
int cur_end = 0;
for (int i = 0; i < size; ++i)
{
int cur_max = vec[i];
cur_start = i;
for (int j = i + 1; j < size; ++j)
{
cur_max += vec[j];
if (cur_max > final_max)
{
final_max = cur_max;
*start = cur_start;
*end = j;
}
}
}
if (final_max < vec[size - 1])
{
final_max=vec[size - 1];
*start = size - 1;
}
}
return final_max;
}
3.测试代码
TEST_METHOD(TestMethod1)
{
int s = 0;
int e = 0;
vector<int> v = { -2,-1,-3,5};
Assert::AreEqual(5,find_max_add(v, 4, &s, &e));
}
TEST_METHOD(TestMethod2)
{
int s = 0;
int e = 0;
vector<int> v = {-3,-1,0,5,99,-150 };
Assert::AreEqual(104, find_max_add(v, 6, &s, &e));
}
TEST_METHOD(TestMethod3)
{
int s = 0;
int e = 0;
vector<int> v = { -20,-1,30,5,-10,33,-49,-13 };
Assert::AreEqual(58, find_max_add(v, 8, &s, &e));
}
TEST_METHOD(TestMethod4)
{
int s = 0;
int e = 0;
vector<int> v = { -41,-28,-0,-3,-5,-33,-44,0 };
Assert::AreEqual(0, find_max_add(v, 8, &s, &e));
}
4样例测试结果
源代码测试

测试代码

软件工程作业-(third)的更多相关文章
- 软件工程作业 - word count
(编程和软件工程作业系列) 实践最简单的项目:WC 实践是理论的基础和验证标准,希望读者贯彻“做中学”的思想,动手实现下面的项目,并和别人的成绩相比较,分析产生差距的原因. 1. 实现一个简单而完整的 ...
- 第一次软件工程作业——html制作一份简单的个人简历
源码链接(码云):https://gitee.com/yongliuli/codes/eavjr7lxotb85s0icnq1z68 简历效果图展示: 代码展示: 添加背景音乐的方法: 在<he ...
- 第一次软件工程作业(One who wants to wear the crown, Bears the crown.)
回顾你过去将近3年的学习经历 1.当初报考的时候,是真正的喜欢计算机这个专业吗? 报考时对于计算机专业只能说不讨厌,也可以认为对其没有任何的感觉. 有一个比我自己还注意我未来的老妈,我的报考只能通过一 ...
- 软件工程作业 - Week 1
构建之法读后疑问: 初步的完成构建程序设计思路之后实现过程中发现了问题或者可以优化的地方是立马就改进还是完成之后按照步骤统一进行优化. 覆盖性测试,针对一些永远用不到只是用来预防极为极端的情况下,例如 ...
- 第一次软件工程作业补充plus
一.代码的coding地址:coding地址. 二.<构建之法>读后问题以及感言(补充): 1.对于7.3MSF团队模型,7.2.6保持敏捷,预期和适应变化,中的"我们是预期变化 ...
- 软件工程作业——Word Counter
github地址 https://github.com/Pryriat/Word_Counter 项目说明 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...
- 软件工程作业0——The Road Not Taken
目录 第一部分:结缘计算机 缘起 四顾 思考 第二部分:在计算机系里学习 挑战 落差 第三部分:未来规划 向前 未来四个月的软工课 项目 内容 这个作业属于 2020春季计算机学院软件工程(罗杰 任健 ...
- 现代软件工程作业 第二章 Github的使用
Github的使用 创建团队 Github首页点击Create Orginazation,出现如下界面: 填写相关信息,邀请团队成员: 点击确认,创建团队完成,界面如下: 创建新的版本库 点击Crea ...
- 现代软件工程作业-- GitHub的学习
1.注册github账号: 2.在github上面新建一个名为HelloWord的项目: 3.将本组的其他成员纳入到HelloWorld中: 4.复制远端仓库的地址: 5.在本地的git bash中使 ...
- 现代软件工程作业 第二章 学习github笔记
在网上大量资料的辅助下,学习了github的基本使用方法,尝试了一些常见的命令.为了便于记忆总结了自己的学习内容. 1.首先需要在github的官网上注册一个帐号,并新建一个repository,选这 ...
随机推荐
- pip模块
pip模块 Usage: pip <command> [options] Commands: install Install packages. download Download pac ...
- CPU监控
题目描述 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用鼠 ...
- ArrayDataProvider数据分页
模型 public function search($page=10){ $lists = self::find()->orderBy('id DESC')->all(); $dataPr ...
- (转)Java并发包基石-AQS详解
背景:之前在研究多线程的时候,模模糊糊知道AQS这个东西,但是对于其内部是如何实现,以及具体应用不是很理解,还自认为多线程已经学习的很到位了,贻笑大方. Java并发包基石-AQS详解Java并发包( ...
- fastjson存在乱序的问题
现象及原因 通常来讲,在使用json数据格式时一般不需要要求数据有序.但凡事都有例外,针对查询时序数据这样一个场景,就必须要求服务器端返回的数据是按时间有序的,否则前端在进行数据展示时就会有问题. 项 ...
- JGUI源码:Tab组件实现(9)
程序界面效果如下 Tab组件由多个TabItem组成,超出部分隐藏,可以通过左右按钮滑动显示出来 1.封装 // 初始化内容 $(function () { J.JTab($(".jgui- ...
- PMP知识点(四)——项目管理计划的内容
项目管理计划([4.2制定项目管理计划]的输出) 包含三个基准和十三个子计划和一些其他内容 三个基准:成本基本.进度基准.范围基准 其中范围基准([5.4创建WBS]的输出)包含了:项目范围说明书.W ...
- Eclipse——手把手教新手安装Eclipse
一.准备工作:安装JRE和JDK. 全名分别为:Java Runtime Environmen和Java SE Development Kit,推荐直接在某度软件中心下载即可,注意区分64位和32位. ...
- mui框架中dialog框的实现
<script type="text/javascript" charset="utf-8"> //mui初始化 mui.init({ swipeB ...
- HTTP高并发调优小记
tomcat服务层 1.修改server.xml <Connector port="8088" protocol="HTTP/1.1" maxThread ...