2012-10-09 46 views
0

我發佈了其他線程,但它沒有收到答案,因此我試圖提供一些我的工作以使其更清楚。使用平分搜索來確定

我需要使用平分方法來確定每月付款以便準確還清一年的債務。

下面是一些代碼:

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

對不起,我的東西負載讀... – Contempt

+0

你被允許使用[ bisect](http://docs.python.org/library/bisect.html)包? –

+0

不,我已經這麼做了......我的代碼應該使用新的下限和上限進行編寫,並確定支付速度比之前我上面發佈的代碼更快。它必須與大數字快速工作......我的代碼不這樣做。它來自麻省理工學院的網站,我自學所以... – Contempt

回答

0

這是關鍵:

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

記得舍入到小數點後2位,否則MITX不會接受的答案

+0

你可能想要將其納入您的其他答案。不需要兩個單獨的答案。 – Bart

+0

你好。在完成MITx並努力完成自己的一切努力之後,我無法相信如此簡單的二分搜索:D – Contempt