我正在尝试对Ruby代码战进行挑战,因为我通过了样本测试,但我无法通过最后一次测试。我得到错误预期:[8,597],而得到:[8,563]。
说明:
一个男人有一辆相当旧车,价值2000美元。他看到了一辆二手车 价值8000美元。他想保留他的旧车,直到他能买到 二手的。
他认为他每个月可以节省1000美元,但他的旧车的价格 而新的每月减少1.5%。而且 损失百分比在每个结束时增加0.5% 两个月。
每月损失百分比的示例:
例如,如果在第一个月末,损失百分比为1, 第二个月末损失百分比为1.5,第三个月末仍为 1.5,第4个月结束2等等......
你能帮助他吗?我们的人发现很难做到这一切 计算他需要多少个月才能积蓄足够的钱购买 他想要的车,还剩下多少钱?
def nbMonths(startPriceOld, startPriceNew, savingperMonth, percentLossByMonth)
months = 0
leftover = 0
currentSavings = 0
until (currentSavings + startPriceOld) >= (startPriceNew)
months += 1
months.even? ? percentLossByMonth = percentLossByMonth + 0.5 : percentLossByMonth
startPriceNew = startPriceNew * (1 - (percentLossByMonth/100))
startPriceOld = startPriceOld * (1 - (percentLossByMonth/100))
currentSavings = currentSavings + savingperMonth
end
leftover = currentSavings + startPriceOld - startPriceNew
return [months, leftover.abs.to_i]
end
我不想看解决方案,我不需要一个解决方案只是在正确的方向上推动会非常有帮助。
另外,我认为代码可能在很多方面都是次优的,但是我已经开始编码2周了,所以尽我所能。
Tnx球员
答案 0 :(得分:3)
你的算法很好。但是你有两个编码错误:
1)percentLossByMonth
需要在将它除以100之前转换为浮点数(5/100 = 0而(5.to_f)/ 100 = 0.05)
2)在说明中说你需要返回剩下的最接近的整数,即leftover.round
def nbMonths(startPriceOld, startPriceNew, savingperMonth, percentLossByMonth)
months = 0
leftover = 0
currentSavings = 0
until (currentSavings + startPriceOld) >= (startPriceNew)
months += 1
percentLossByMonth += months.even? ? 0.5 : 0
startPriceNew = startPriceNew * (1 - (percentLossByMonth.to_f/100))
startPriceOld = startPriceOld * (1 - (percentLossByMonth.to_f/100))
currentSavings += savingperMonth
end
leftover = currentSavings + startPriceOld - startPriceNew
return [months, leftover.round]
end
答案 1 :(得分:2)
您的代码问题已经确定,因此我将提供另一种计算方法。
r = 0.015
net_cost = 8000-2000
n = 1
months, left_over = loop do
r += 0.005 if n.even?
net_cost *= (1-r)
tot = n*1000 - net_cost
puts "n=#{n}, r=#{r}, net_cost=#{net_cost.to_i}, " +
"savings=#{(n*1000).to_i}, deficit=#{-tot.to_i}"
break [n, tot] if tot >= 0
n += 1
end
#=> [6, 766.15...]
months
#=> 6
left_over
#=> 766.15...
并打印
n=1, r=0.015, net_cost=5910, savings=1000, deficit=4910
n=2, r=0.020, net_cost=5791, savings=2000, deficit=3791
n=3, r=0.020, net_cost=5675, savings=3000, deficit=2675
n=4, r=0.025, net_cost=5534, savings=4000, deficit=1534
n=5, r=0.025, net_cost=5395, savings=5000, deficit=395
n=6, r=0.030, net_cost=5233, savings=6000, deficit=-766