软件工程第三次作业

题目描述

问题: 给定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);
		}

测试结果

posted @ 2019-04-20 19:57  死星  阅读(170)  评论(0编辑  收藏  举报