调试万圣节特卖:Hackerrank

这个想法是应用线性递增折扣,直到达到该m值,然后所有下一次购买都是m

问题链接

看起来很简单,但我的方法没有涵盖一些边缘情况。

例子:

输入:

16, 2, 1, 9981

输出:

9918

预期输出:

9917

我缺少什么?

更好的方法也受到高度赞赏

// tried on (20,3,6,80) works like charm

function 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, 6

s您的 Mist 钱包里有美元。万圣节特卖期间您可以购买多少款游戏?


慕哥6287543
浏览 129回答 1
1回答

撒科打诨

错误:while(remaining > min && max > min) {&nbsp; &nbsp; &nbsp; &nbsp; count++&nbsp; &nbsp; &nbsp; &nbsp; max-=d&nbsp; &nbsp; &nbsp; &nbsp; remaining -= max&nbsp; &nbsp; }最大值 > 最小值当您执行此操作时,您不是在比较当前的最大值与最小值,而是在比较上一次操作的最大值与最小值。此外,剩余的值应始终大于最大值。如果 max 大于 m,则您不能以 m 的成本购买商品。看一下下面的代码,它通过了所有测试用例。// Complete the how many games function below.function howManyGames(p, d, m, s) {&nbsp; &nbsp; // Return the number of games you can buy&nbsp; &nbsp; if(s<p) return 0&nbsp; &nbsp; let remaining = s&nbsp; &nbsp; let max = p&nbsp; &nbsp; let min = m&nbsp; &nbsp; let count = 0&nbsp; &nbsp; while(remaining > min && max > min && remaining > max) {&nbsp; &nbsp; &nbsp; &nbsp; count++&nbsp; &nbsp; &nbsp; &nbsp; remaining -= max&nbsp; &nbsp; &nbsp; &nbsp; max-=d&nbsp; &nbsp; }&nbsp; &nbsp; if(max > m)&nbsp; &nbsp; &nbsp; &nbsp; return count&nbsp; &nbsp; return count + (m !== 0 ? Math.floor(remaining/m): 0)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript