2013-02-25 2 views
1

Python 문제 : 이 프로그램에 접근하는 데 많은 어려움을 겪고 있습니다. 누군가 나를 도울 수 있습니까, 아니면 적어도 저에게이 프로그램이 요구하는 것에 대한 힌트를 줄 수 있습니까?Python : 정수의 최소 누계 축

5.37 정수 목록을 입력으로받는 쓰기 함수 mssl() (최소 합계 하위 목록). 그런 다음 입력 목록의 최대 합계 하위 목록의 합계를 계산하여 반환합니다. 최대 합계 하위 목록은 항목의 합이 가장 큰 입력 목록의 하위 목록 (조각)입니다. 빈 하위 목록은 합계가 0으로 정의됩니다. 예를 들어 목록의 최대 합계 하위 목록입니다.

[4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
is [5, -2, 7, 7, 2] and the sum of its entries is 19. 
>>> l = [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
>>> mssl(l) 
19 
>>> mssl([3,4,5]) 
12 
>>> mssl([-2,-3,-5]) 
0 
+0

어떤 언어가 있어야하나요? –

+0

그것은 파이썬에 있어야하는데 제목에 넣었습니다. – AppDude27

+0

아 - 하 그래서 당신이 한 - 어떤 시점에서 자신을 안경을 기억해야합니다 :) –

답변

0

먼저 목록의 가능한 모든 하위 목록을 찾아야합니다. 목록이 [3,4,5]입니다 감안할 때 가능한 모든 하위 목록은 다음과 같습니다 이들의 최대 합계를 찾을

l = your_list 
for start in xrange(len(l)): 
    for end in xrange(1, len(l)+1): 
    current_sublist = l[start:end] 

다음, 당신은 임무됩니다

[] 
[3] 
[3,4] 
[3,4,5] 
[4] 
[4,5] 
[5] 

당신은 중첩 된 loopslicing를 사용하여이 작업을 수행 할 수 있습니다 하위 목록. 한 가지 방법은 현재 하위 목록의 합계가 이전 합계보다 클 경우 로컬 변수를 만들어 루프에서 업데이트하는 것입니다.

def mssl(l): 
    f = 0 
    for start in xrange(len(l)): 
    for end in xrange(1, len(l)+1): 
     s = sum(l[start:end]) 
     if s > f: 
     f = s 
    return f 

이의 그것을 테스트 해보자 :

print mssl([4, -2, -8, 5, -2, 7, 7, 2, -6, 5]) 
print mssl([3,4,5]) 
print mssl([-2,-3,-5]) 

출력 :

19 
12 
0 

좋은 측정을위한 한 줄 :

을의도 함수로 묶지하자
l = [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] 
max(sum(l[s:e]) for s in xrange(len(l)) for e in xrange(1, len(l)+1))