• 软件工程(2019)第三次个人作业


    一、题目要求

    给定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。
    -- 引用自《百度百科》

    二、题目分析

    若记tran[j]=max(a[i]+a[i+1]+..+a[j]),其中1<=i<=j,并且i<=j<=n。则所求的最大子段和为max tran[j],1<=j<=n。由tran[j]的定义可易知,当tran[j-1]>0时tran[j]=tran[j-1]+tran[j],否则tran[j]=a[j]。故tran[j]的递推方程为:
    tran[j]=max(tran[j-1]+a[j],a[j]),1<=j<=n。

    三、源代码

    #include <iostream>
    
    using namespace std;
    int maxsub(int arr[],int count)
    {
    	int tran[100];
    	int max;
    	tran[0] = arr[0];
    	max = tran[0];
    	for (int i = 1; i < count; i++)
    	{
    		if (tran[i - 1] > 0)
    			tran[i] = tran[i - 1] + arr[i];
    		else
    			tran[i] = arr[i];
    		if (tran[i] > max)
    			max = tran[i];
    	}
    	if (max < 0)
    		max = 0;
    	return max;
    }
    int main()
    {
    	int arr[100];
    	int count;
    	int max;
    	cin >> count;
    	for (int i = 0; i < count; i++)
    	{
    		cin >> arr[i];
    	}
    	max = maxsub(arr, count);
    	cout << max;
    	return 0;
    }
    

    coding地址:点击这里

    四、流程图

    五、单元测试

    1.我选择的为判定/条件覆盖,判断样例如下:
    (1){ -2, 11, -4, 13, -5, -2 }
    (2){ -1, -2, -3 }
    2.测试代码

    #include "pch.h"
    #include "CppUnitTest.h"
    #include "..	est标头.h"
    using namespace Microsoft::VisualStudio::CppUnitTestFramework;
    
    namespace UnitTest1
    {
    	int arr1[] = { -2, 11, -4, 13, -5, -2 };
    	int arr2[] = { -1, -2, -3 };
    	TEST_CLASS(UnitTest1)
    	{
    	public:
    		
    		TEST_METHOD(TestMethod1)
    		{
    			Assert::AreEqual(maxsub(arr1, 6), 20);
    		}
    		TEST_METHOD(TestMethod2)
    		{
    			Assert::AreEqual(maxsub(arr2, 3), 0);
    		}
    	};
    }
    

    六、测试结果

    作者:Xuqiang —— 苡灬後丶

    出处:https://www.cnblogs.com/Xu-Qiang/

    个性签名: 一切都是最好的安排!

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Java中DAO的实现
    使用Fabric自动化你的任务
    JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)
    财政业务流程
    ubuntu 14.04 install google chrom stable
    gcc编译命令
    textread 用法
    ubuntu software
    Coursera.org打不开怎么办
    Presentation__short sentence review mining
  • 原文地址:https://www.cnblogs.com/Xu-Qiang/p/10746356.html
Copyright © 2020-2023  润新知