zoukankan      html  css  js  c++  java
  • 软件工程(2019)第三次作业

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

    2.分析

      这道题是一个动态规划问题,可以使用分治法和递推法解决。我使用的是递推法。

    3.项目目录结构

    4.流程图

    5.源代码

    Coding地址

    • 函数源代码
    
    def deal(arrList:list)->int:
        """
        :param arrList: 传入数列,参数类型为列表
        :return:最大子数组之和
        """
        flag = True
        if len(arrList)==0:
            return 0
        for d in arrList:
            if d>0:
                flag = False
        if flag:
            return 0
    
        Max = 0;dp = 0
        for d in arrList:
            if dp>0:
                dp = dp + d
            else:
                dp = d
            if dp>Max:
                Max = dp
    
        return Max
    
    
    • 测试源代码
    import unittest
    from project1.main import deal
    
    class MyTestCase(unittest.TestCase):
        def test(self):
            self.assertEqual(deal([1,2,-1,4]), 6)
            self.assertEqual(deal([-2,11,-4,13,-20,-2]), 20)
            self.assertEqual(deal([-1,-2,-3,-4]), 0)
    
    
    
    if __name__ == '__main__':
        unittest.main()
    
    
    

    6.单元测试

      我的测试实现了条件/组合覆盖

    • 尝试条件组合覆盖集
      ① arr不合法
      ② arr合法,temp[i-1]>0,temp[i]>Max
      ③ arr合法,temp[i-1]>0,temp[i]<Max
      ④ arr合法, temp[i-1]<0,temp[i]>Max
      ⑤ arr合法, temp[i-1]<0,temp[i]<Max

    • 测试用例如下表

    测试序号 测试用例 预期结果
    [-1,-2,-3,-4] 0
    [-2,11,-4,13,-20,-2] 20
    [1,2,-1,4] 6
    • 测试结果

  • 相关阅读:
    题目:返回一个整数数组中最大子数组的和。(要求程序必须能处理1000 个元素)
    四则运算三(接受用户输入答案,并判断对错。)
    二维数组
    结对开发(一位数组)
    测试四则运算
    四则运算2
    程序设计思路
    项目计划总结
    小学二年级题目的改进
    二年级题目的改进
  • 原文地址:https://www.cnblogs.com/Hubz131/p/10745961.html
Copyright © 2011-2022 走看看