题目:最大连续子数组和(最大子段和)
背景
问题: 给定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。
-- 引用自《百度百科》
完成本次实验代码编写后,选择了判定覆盖,代码利用扫描算法进行计算。代码编写难度不算大,在软件工程的代码测试分析上,根据选择的判断判定覆盖进行了几组数据的测试。
include
using namespace std;
int main()
{
int n;
int Max = -999, sum = 0;
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)
{
if (sum < 0)
{
sum = a[i];
}
else
{
sum = sum + a[i];
}
Max = max(Max, sum);
}
cout << Max << endl;
return 0;
}