- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用以下方法计算每月支付的最低还款额:
balance = 999999
annualInterestRate = .18
monthlyInterestRate = annualInterestRate/12
balanceCOPY = balance
#Bisection search parameters
lo = balance/12
hi = (balance*(1+monthlyInterestRate**12))/12
epsilon = .01
guess = (lo + hi)/2
while True:
for month in range(1,13):
balance = balance - guess
balance = balance + (monthlyInterestRate*balance)
if balance > 0 and balance > epsilon:
lo = guess
balance = balanceCOPY
elif balance < 0 and balance < -epsilon:
hi = guess
balance = balanceCOPY
else:
print('Lowest payment: ',str(round(guess,2)))
break
guess = (lo + hi)/2
但是,我似乎陷入了某种无限循环,其中我的 guess
变量没有被更新。我怎样才能打破无限循环并更新我的 guess
变量?
问题出在我的数学上。我想说
hi = (balance*(1+monthlyInterestRate)**12)/12
谢谢大家的帮助!
最佳答案
首先,如果您正在做 MITx 练习并完成了之前的测试(只是为了在猜测中增加 10),那么您还需要迈出一小步才能获得它。只需要对 while 条件进行一些调整,然后检查年度结果。
关于二分搜索,我将尝试阐明这个概念。你总是有两个肢体,最小的和最大的。并且总是会从四肢中间开始猜测。
第一次猜测后,您需要根据年度结果调整四肢。如果在为饮料、女孩、节目书和其他东西支付了最低费用一年后,您还没有支付全部余额,那么您肯定需要提高最低费用。否则,例如,如果您在第 10 个月支付了总余额,那么明年您需要多喝点酒并结识新女孩!开个玩笑……你需要降低最小值。这是您在完成一年的硬付款后需要做的检查
在练习中,我们有:
第一个猜测将是(最小值 + 最大值)/2 我这样调用 guessMinimum:
guessMinimum = (minimum + maximum)/2
因此您将开始使用第一个猜测 (guessMinimum)。一年后你会检查剩余的。如果余数是负数,说明你付出的太多了。您需要减少每月付款。另一方面,如果一个月后剩余为正(例如,超过您的精度(例如 0.10)),您需要减少每月付款,好吗?!
尝试设计思路......
+------------------------------------------------+
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
|MINIMUM guess MAXIMUM|
| Minimum |
+------------------------------------------------+
如果一年后,“remain”为负数(举例)。意味着'guessMinimum'太多了!!!你需要...不是你,程序!!程序需要调整它,降低最小值,这样......
+---------------------------------------------------+
| Got negative 'remain' |
| ++ |
| /\ || /\ /\ |
| \/-------------||---\/-------------------\/ |
| MINIMUM || guess MAXIMUM |
| ++ Minimum-, |
| ', |
| `. |
| `., |
| ', |
| ', |
| `. |
| ` |
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
| MINIMUM guess MAXIMUM |
+---------------------------------------------------+
对不起各位。我试图插入图像,但作为新成员。我做不到。需要至少 10 个声望....帮助我!!!!使用字符的工作量太大了!!!!
CODE 需要做这项艰苦的工作来调整最小值,直到“剩余”是可以接受的(在您的精度范围内,或 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)
就是这样。
关于python - 使用 python 中的二分搜索计算最低月付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484917/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!