为了账号安全,请及时绑定邮箱和手机立即绑定

调试万圣节特卖:Hackerrank

调试万圣节特卖:Hackerrank

慕哥6287543 2023-08-24 15:44:36
这个想法是应用线性递增折扣,直到达到该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)

}


查看完整回答
反对 回复 2023-08-24
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信