【题目】
小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付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)) + f
和
Math.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);
以上所有仅为个人的解题思路,如果有问题或更好的解题方法,欢迎大家提出。