首先,如果您正在做 MITx 练习并完成了之前的测试(只是为了增加 10 猜测),那么您只需一小步即可获得它。只需要对while条件进行一些调整并检查年度结果。
关于二分搜索,我将尝试澄清这个概念。你总是有两个极端,最小的和最大的。并且总是从四肢的中间开始猜测。
在第一次猜测之后,您需要根据年度结果调整四肢。如果一年后为饮料、女孩、节目书和其他东西支付了最低金额,但您没有支付总余额,那么您肯定需要提高最低金额。否则,例如,如果您在第 10 个月支付了全部余额,则您需要多喝水,并在明年结识新的女孩!!!开个玩笑……你需要减少最低限度。这是您在完成一年的硬付款后需要做的检查
在练习中,我们有:
- 余额和年利率=给定(我们不需要关心)
- 最小值(下限)= 余额 / 12
- 最大值(上限)=(余额 x(1 + 月利率)**12)/12.0
第一个猜测是 (minimum + maximum) /2 我叫guessMinimum,所以:
guessMinimum = (minimum + maximum)/2
所以你将开始使用第一个猜测(guessMinimum)。一年后,您将检查剩余部分。如果剩余为负数,则意味着您付出了太多。您需要减少每月付款。另外,如果一个月后剩余为正数(例如,超过您的精度(例如 0.10)),您需要减少每月付款,好吗?!
试图设计思维......
+------------------------------------------------+
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
|MINIMUM guess MAXIMUM|
| Minimum |
+------------------------------------------------+
如果一年后,“剩余”为负数(例如)。意味着“guessMinimum”太多了!!!你需要......不是你,程序!程序需要调整它,降低最小值所以......
+---------------------------------------------------+
| Got negative 'remain' |
| ++ |
| /\ || /\ /\ |
| \/-------------||---\/-------------------\/ |
| MINIMUM || guess MAXIMUM |
| ++ Minimum-, |
| ', |
| `. |
| `., |
| ', |
| ', |
| `. |
| ` |
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
| MINIMUM guess MAXIMUM |
+---------------------------------------------------+
对不起大家。我尝试插入图像,但作为新成员。我不能。至少需要10个声望....帮帮我!!!使用角色的工作量太大了!!!!
并且代码需要做这项艰苦的工作来调整最小值,直到“剩余”是可以接受的(在你的精度内,或 epsilon,或任何字母或变量或......好吧。:)
了解概念和图纸后..让我们检查代码。
balance = 999999;
annualInterestRate = 0.18
monthlyInterestRate = annualInterestRate / 12
minimum = balance / 12
maximum = (balance * (1 + monthlyInterestRate)**12) / 12.0
guessMinimum = (minimum + maximum)/2
remain = balance #if you payed nothin, the remain is the balance!!!!
precision = 0.10 #you choose....
while (remain >= precision):
guessMinimum = (minimum + maximum)/2
for i in range (1,13):
newBalance = remain - guessMinimum
monthInterest = annualInterestRate/12*newBalance
remain = newBalance+monthInterest
# after one month, the CODE need to check about the remain
if (remain < 0): #paying too much.... need to decrease the value
maximum = guessMinimum #remember my beautiful draw above!!
remain = balance # reset the remain to start again!!
elif (remain > precision): #paying less .... need to increase the value
minimum = guessMinimum
remain = balance # reset the remain to start again!!
print "Lowest Payment: %.2f" %(guessMinimum)
而已。