软件工程第三次作业
求最大连续子数组和(最大子段和)
问题描述:给定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、流程图
![](https://img2018.cnblogs.com/blog/1644582/201904/1644582-20190417155325191-1326666696.png)
###2、编写程序代码
```
#include "pch.h"
#include using namespace Microsoft::VisualStudio::CppUnitTestFramework;
namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:
TEST_METHOD(TestMethod1)
{
int n = 3;
int a[] = { -1,-2,-4 };
Assert::AreEqual(maxsum(n,a), 0);
}
TEST_METHOD(TestMethod2)
{
int n = 6;
int a[] = { -2,11,-4,13,-5,-2 };
Assert::AreEqual(maxsum(n, a), 20);
}
TEST_METHOD(TestMethod3)
{
int n = 8;
int a[] = { 2,-3,4,-5,6,-7,-1,9 };
Assert::AreEqual(maxsum(n, a), 9);
}
TEST_METHOD(TestMethod4)
{
int n = 10;
int a[] = { 10,4,-100,99,3,4,-10,2,55,44};
Assert::AreEqual(maxsum(n, a), 197);
}
};
}
###<font color=black>4、测试结果</font>
<img src="https://img2018.cnblogs.com/blog/1644582/201904/1644582-20190417154544922-1692545548.png" width="100%" height="100%" />
####<font color=black>由图可知测试结果均正确!!!</font>