【发布时间】:2013-11-02 13:23:28
【问题描述】:
我的 MITx CS 课程有一个作业,但我遇到了以下问题:
以下变量包含如下所述的值:
balance - 信用卡上的未结余额
annualInterestRate - 年利率小数
概括一下这个问题:我们正在寻找最小的月度 这样我们就可以在一年内还清全部余额。 这个支付价值的合理下限是多少? $0 是 明显的答案,但你可以做得更好。如果没有 利息,债务可以通过每月支付十二分之一来还清 原来的余额,所以我们必须至少支付这么多 月。原始余额的十二分之一是一个很好的下限。
什么是好的上限?想象一下,我们不是按月支付,而是 年底还清了全部余额。我们最终的 工资必须高于我们每月支付的费用 分期付款,因为利息是在我们的余额上复利的 每个月都没有还清。所以每月的一个很好的上限 在获得利息后,付款将是余额的十二分之一 全年按月计算。
简而言之:
月利率=(年利率)/12.0 月供 下限 = 余额 / 12 月供上限 = (余额 x (1 + 月利率)12) / 12.0
编写一个使用这些边界和二等分搜索的程序(了解更多 信息查看维基百科页面上的二等分搜索)以找到 每月最少支付一美分(不再是 10 美元的倍数),例如 我们可以在一年内还清债务。用大号试试 输入,并注意它有多快(尝试在您的 问题2的解决方案进行比较!)。产生相同的返回值 你在问题 2 中做了。
现在,这是我能够想出的,但它实际上会产生错误的输出。我不知道这段代码出了什么问题:
#------------Defined variables---------------#
balance = 999999
annualInterestRate = 0.18
#------------Defined variables---------------#
monthlyInterestRate = annualInterestRate / 12.0
monthlyPaymentLower = balance / 12
monthlyPaymentUpper = (balance * (1 + monthlyInterestRate)**12) / 12.0
month = 1
total = 0
while (total < balance) and month < 13:
pay = (monthlyPaymentLower + monthlyPaymentUpper) / 2
total += pay
if total < balance:
monthlyPaymentLower = pay
elif total > balance:
monthlyPaymentHigher = pay
month += 1
if month == 13:
total = 0
month = 1
print 'Lowest Payment: ' + str(round(pay, 2))
帮助?
像往常一样,不寻找完整的解决方案或源代码,只是提示我哪里出错了。 (我总是得到反对票。:/)
【问题讨论】:
-
第一个提示:如果您需要了解发生了什么,调试器可能会很有帮助。
-
不,我完全明白那里发生了什么,我之前写过一个二分算法,但这一次,我不知道出了什么问题。
-
你看相关问题了吗?
-
是的,但就像我之前说过的,我不想复制粘贴别人的代码,我想自己解决我的问题。
-
显示预期结果。顺便说一句:“MITx 6.00.1x 计算机科学和 Python 编程简介”?