这个想法是应用线性递增折扣,直到达到该m值,然后所有下一次购买都是m问题链接看起来很简单,但我的方法没有涵盖一些边缘情况。例子:输入:16, 2, 1, 9981输出:9918预期输出:9917我缺少什么?更好的方法也受到高度赞赏// tried on (20,3,6,80) works like charmfunction howManyGames(p, d, m, s) { // Return the number of games you can buy if(s<p) return 0 let remaining = s-p let max = p let min = m let count = 1 while(remaining > min && max > min) { count++ max-=d remaining -= max } return count + (m !==0?Math.floor(remaining/m): 0)}问题描述:您想从著名的在线视频游戏商店 Mist 购买视频游戏。通常,所有游戏都以相同的价格(美元)出售p。然而,他们计划下个月举行季节性万圣节促销活动,您可以以更便宜的价格购买游戏。具体来说,您在特卖期间购买的第一款游戏将以p美元出售,但您随后购买的每款游戏将以d比您购买的前一款游戏便宜的美元出售。这种情况将持续下去,直到成本变得小于或等于m美元,之后您购买的每个游戏m都将花费美元。例如,如果 p=20 , d=3 , m=6,那么以下是您购买的前 11 款游戏的费用(按顺序排列):20, 17, 14, 11, 8, 6, 6, 6, 6, 6s您的 Mist 钱包里有美元。万圣节特卖期间您可以购买多少款游戏?
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
错误:
while(remaining > min && max > min) {
count++
max-=d
remaining -= max
}
最大值 > 最小值
当您执行此操作时,您不是在比较当前的最大值与最小值,而是在比较上一次操作的最大值与最小值。
此外,剩余的值应始终大于最大值。
如果 max 大于 m,则您不能以 m 的成本购买商品。
看一下下面的代码,它通过了所有测试用例。
// Complete the how many games function below.
function howManyGames(p, d, m, s) {
// Return the number of games you can buy
if(s<p) return 0
let remaining = s
let max = p
let min = m
let count = 0
while(remaining > min && max > min && remaining > max) {
count++
remaining -= max
max-=d
}
if(max > m)
return count
return count + (m !== 0 ? Math.floor(remaining/m): 0)
}
添加回答
举报
0/150
提交
取消