您的位置:首页 > Web前端 > JavaScript

JavaScript趣题:买车子

2016-09-11 09:31 204 查看
小王有一台很旧的车,大概值2000块钱,而且很容易出手。

他看中了一台价值8000块的二手车,想在存够钱后买下它。

他估摸着每个月能存1000块钱。

他现在的车和那台二手车,每个月都会降价,最开始是降1%,然后每隔两个月,降价幅度都会增加0.5%。

比如,第一个月会降价1%,第二个月就降了1.5%,第三个月就还是降了1.5%,第四个月是2%。

换句话说,逢单月降价幅度和前一个月一样,逢双月,降价幅度比前一个月加0.5%。

你能帮帮他吗?

他至少得存多少个月的钱才能买下这部二手车?那时他买车后还可以剩下多少钱?

函数原型如下:

nbMonths(startPriceOld, startPriceNew, savingperMonth, percentLossByMonth)

分别对应:旧车价格,二手车价格,每月存款定额,第一个月降幅

例子:

nbMonths(12000, 8000, 1000, 1.5) // [0, 4000]这种情况,旧车比二手车价值还高些,那还用等啥?直接买呗!还能赚个4000块!
nbMonths(8000, 8000, 1000, 1.5) // [0, 0]这种情况,直接以旧换新,两两相抵了。
nbMonths(2000, 8000, 1000, 1.5) // [6, 766]这种情况,得花上6个月,最后结余还剩766.158...等一串小数,四舍五入得766块。
这道题目,很简单的加减乘除,但诸位不要想太多了,比如存银行吃利息这样的主意~

好了,直接上代码了:

function nbMonths(startPriceOld, startPriceNew, savingperMonth, percentLossByMonth){
percentLossByMonth /= 100;
var months = 1;
var percentLossIncrement = 0.005;
var alreadyHaveMoney = 0;
while(startPriceOld + alreadyHaveMoney < startPriceNew){
if(months % 2 === 0){
percentLossByMonth += percentLossIncrement;
}
startPriceOld *= (1 - percentLossByMonth);
startPriceNew *= (1 - percentLossByMonth);
alreadyHaveMoney += savingperMonth;
months++;
}
return [months-1,Math.round(startPriceOld + alreadyHaveMoney - startPriceNew)];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息