软件工程第三次作业
题目描述
问题: 给定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。
解题思路
建立一个新数组arraysum,将所有字段和放进这个数组里再从中找出最大值
代码托管地址
https://dev.tencent.com/u/dtid_e7f16daecb0221bb/p/ruanjiangongchengzuoye/git
主要代码
int add(int n,int array[])
{
int j;
int i;
int arraysum[50];
arraysum[0] = 0;
int max = 0;
int k = 0;
for(i=0;i<n;i++)
{
int sum = 0;
for (j = i; j < n; j++)
{
sum =sum+ array[j];
arraysum[k ] = sum;
k++;
}
}
int s=0;
for (i = n; i >0; i--)
{
s += i;
}
for (int x = 0; x <= s; x++)
{
if(max<=arraysum[x])
{
max = arraysum[x];
}
}
if(max<=0)
{
max = 0;
}
cout << max;
return max;
}
代码流程图
判定/条件覆盖测试
涉及的条件有:
i<n,i>=n;
j<n,j>=n;
x<=n,x>n;
max<=arraysum[x],max>arraysum[x];
max<0,max>=0;
设计测试用例如下:
Test1:n=6,a[] = { -1,-2,-3,4,5,-2 };
Test2:n=6,a[]={ -1,-2,-3,-4,-5,-2 };
Test3:n=6,a[]={{ -1,0,-3,-4,-5,-2 };
测试代码
TEST_METHOD(TestMethod1)
{
int n=6;
int a[] = { -1,-2,-3,4,5,-2 };
Assert::AreEqual(add(n,a), 9);
}
TEST_METHOD(TestMethod2)
{
int n = 6;
int a[] = { -1,-2,-3,-4,-5,-2 };
Assert::AreEqual(add(n, a), 0);
}
TEST_METHOD(TestMethod3)
{
int n = 6;
int a[] = { -1,0,-3,-4,-5,-2 };
Assert::AreEqual(add(n, a), 0);
}