JavaScript趣題:買車子

小王有一臺很舊的車,大概值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)];
}

發佈留言