软件工程——作业(Third)


一、题目要求


问题:

给定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。


二、编写代码


import random
temp=input("请输入列表长度:")
n=int(temp)
A=[];
j=0
for i in range(n-1):
        j=random.randint(-100,100)
        A.append(j)
def onLineMaxFind(A):
    thisSum=0
    maxSum=0
    for i in range(0,n-1):
        thisSum=thisSum+A[i]
        if thisSum>maxSum:
            maxSum=thisSum
        elif thisSum<0:
            thisSum=0
    return maxSum
print(onLineMaxFind(A))

三、代码流程图



四、测试代码


import unittest
from maxsum import *

arr0=[]
arr1=[-1,-2,-3,-4]
arr2=[-2,11,-4,13,-2,-5]

class TestMaxsum(unittest.TestCase):
    #test for maxsum
    def test0(self):
        self.assertEqual(0,maxsum(arr0))
    def test1(self):
        self.assertEqual(0,maxsum(arr1))
    def test2(self):
        self.assertEqual(21,maxsum(arr2))
    def test3(self):
        self.assertEqual(20,maxsum(arr3))
    def test4(self):
        self.assertEqual(15,maxsum(arr4))

if __name__=='__main__':
    print()
    unittest.main()

五、测试结果


六、总结

Python语言相比java更加简单舒服呀,要多多练习

原文地址:https://www.cnblogs.com/fanshen/p/10729621.html