(一)题目(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。
寻求算法思想:
(1) 首先定义子数组和以及最大子数组和为零;数组下标i=0;
(2)i是否大于数组长度?否:进行(3),是:返回最大子数组和,结束!
(3) 取第i个数组值,子数组和=子数组和+第一i个数组值。进行(4);
(4) 比较子数组和与最大数组和大小,如果子数组和大,最大数组和值取为子数组和值;如果子数组和小,子数组和重新归零。进行(5);
(5)i++;进行(2);
求数组最大连续子数组和子程序和测试数据已装入个人coding网页,点我进入coding
算法流程图如下:
(二)测试运行
(1)VS2017创建c++空项目,在项目源文件目录下添加c++文件,头文件目录下创建头文件
源文件下主函数输入数组:
int main()
{
int count;
int a[100];
scanf_s("%d", &count);
cin>>count;
for (int i = 0; i < count; i++)
{
cin >> a[i];
}
....
printf("%d\n", ADD(a,count));
return 0;
}
头文件下添加求数组最大连续子数组和子函数的定义。
int ADD(inta[],int length);
(2)添加单元测试,给出测试数据
(3)判定/条件覆盖:
对于测试样例int k[6]={-2,11,-4,13,-5,-2},
测试过程如下组图:
(1)
(2)
(3)
(4)
(5)
满足每个判定/条件。达到判定/条件覆盖。