-1

重複の可能性:
二分探索を使用して決定する

他のスレッドを投稿しましたが、回答が得られなかったので、より明確にするために私の仕事の一部を提供しようとしています.

ちょうど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を超えている場合はリセットすることにあると思います。この問題を試みる方法がわかりませんそして、誰かを助けてください:)

4

2 に答える 2

4

これは正しいものです。

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)/10 * (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)
于 2012-10-13T22:27:28.130 に答える
3

これはあなたが必要なものです

while abs(x) > epsilon:
    x = balance
    for month in range(0, 12):
        x = (x - ans) * (1+monthly_interest)
于 2012-10-11T15:25:17.510 に答える