2012-10-09 3 views
0

을 게시했습니다. 다른 스레드를 게시했지만 응답을받지 못했습니다. 따라서 더 명확하게 작업하기 위해 노력하고 있습니다.이진 검색을 사용하여

정확하게 1 년 동안 빚을 갚기 위해 월 단위 지불을 결정하기 위해 이분법을 사용해야합니다. 나는 매우 해제 방법 답을받을 그러나

originalBalance = 320000 
annualInterestRate = 0.2 
monthly_interest = annualInterestRate/12 
low = originalBalance/12 
high = (originalBalance*(1 + monthly_interest)**12)/12 
epsilon = 0.01 
min_payment = (high + low)/2.0 

while min_payment*12 - originalBalance >= epsilon: 
    for month in range(0, 12): 
     balance = (originalBalance - min_payment) * (1+monthly_interest) 

    if balance < 0: 
     low = min_payment 
    elif balance > 0: 
     high = min_payment 
     min_payment = (high + low)/2.0 
print "lowest payment: " + str(balance) 

: 여기

는 일부 코드의 내 친구가 정답이라고 나에게 말했다

298222.173851 :보다 훨씬 낮은 29157.09

내 ... 문제는 반올림 (내가 아직하지 않았 음)이고 균형이 0 이상이면 모든 반복 후 균형을 유지하는 것 같습니다.이 문제를 시도하고 제발, 도와 줄 사람을 알아낼 수 없습니다 :)

+0

죄송 대답을 수락하지 않습니다 소수점 이하 2 자리까지 반올림 기억 ... – Contempt

+0

당신은 [를 사용할 수 있습니까 bisect] (http://docs.python.org/library/bisect.html) 패키지? –

+0

아니,이 어려운 방법 ... 내 코드는 새로운 상한 및 하한을 사용하여 작성해야하며 이전 코드는 위에 게시했습니다. 큰 숫자로도 빠르게 작동해야합니다 ... 내 코드는 그렇게하지 않습니다. 그것은 MIT 웹 사이트에서 왔고 나는 스스로 공부하고 있습니다 ... – Contempt

답변

0

이 핵심입니다 :

while abs(x) > epsilon: 
    x = balance 
    for month in range(0, 12): 
     x = (x - ans) * (1+monthly_interest) 
0

것은 그렇지 MITX가 읽을 수있는 물건의 부하

+0

이것을 당신의 다른 대답에 포함 시키십시오. 두 가지 별도의 답변이 필요하지 않습니다. – Bart

+0

안녕하세요. 이제 MITx를 완성하고 모든 것을 스스로하기 위해 노력한 후에, 나는 쉬운 이분 검색이 얼마나 믿을 수 없는가? – Contempt

관련 문제