1. 程式人生 > >2018網易秋招內推筆試題——獨立的小易

2018網易秋招內推筆試題——獨立的小易

【題目】

小易為了向他的父母表現他已經長大獨立了,他決定搬出去自己居住一段時間。一個人生活增加了許多花費: 小易每天必須吃一個水果並且需要每天支付x元的房屋租金。當前小易手中已經有f個水果和d元錢,小易也能去商店購買一些水果,商店每個水果售賣p元。小易為了表現他獨立生活的能力,希望能獨立生活的時間越長越好,小易希望你來幫他計算一下他最多能獨立生活多少天。 

輸入描述:
輸入包括一行,四個整數x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割

輸出描述:
輸出一個整數, 表示小易最多能獨立生活多少天。

輸入例子1:
3 5 100 10

輸出例子1:
11
【題目解析】
這道題很簡單,其實就是一個簡單的初中數學應用題。但是有一個坑一定要注意,當時就是踩到這個坑裡了,一直都是隻有90%通過。這個坑就是浮點數的計算精度問題。Math.floor((d-f*x)/(p+x)) + fMath.floor((d-f*x)/(p+x) + f)的計算結果是不一樣的。先進行加法時,浮點數的計算精度會丟失,如1000000000+0.9999999999 = 1000000001。因此應該先對除得的結果進行向下取整達到整數,再和另一個整數相加。 【程式碼實現】
var line = readline().split(" ");
var x = parseInt(line[0]);  //每天的租金
var f = parseInt(line[1]);  //已有水果數
var d = parseInt(line[2]);  //現有現金
var p = parseInt(line[3]);  //每個水果的價錢
var total = Math.floor(d/x);  //如果所有的錢都用來付租金,可以生存的天數
var max = 0;
if(total <= f) {
    max = total; 
} else {
    max = Math.floor((d-f*x)/(p+x)) + f;  //(有個坑在這兒)
}
print(max);

以上所有僅為個人的解題思路,如果有問題或更好的解題方法,歡迎大家提出。