【问题标题】:Debugging Halloween Sale : Hackerrank调试万圣节促销:Hackerrank
【发布时间】:2020-11-22 14:07:48
【问题描述】:

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

Link to the problem

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

示例:

输入:

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)
}

问题描述:

您想从著名的在线视频游戏商店购买视频游戏 雾。

通常,所有游戏都以相同的价格出售,pdollars。然而, 他们计划下个月在 您可以以更便宜的价格购买游戏。具体来说,第一个 您在促销期间购买的游戏将以pdollars 出售,但每 您购买的后续游戏将以低于 ddollars 的价格出售 您购买的前一个的成本。这将持续到 cost 变得小于或等于mdollars,之后每场比赛 您购买将花费mdollars。

例如,

如果 p=20 , d=3 , m=6,

那么以下是您购买的前 11 款游戏的费用,按顺序排列:

20, 17, 14, 11, 8, 6, 6, 6, 6, 6

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

【问题讨论】:

    标签: javascript algorithm


    【解决方案1】:

    错误:

    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)
    }

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多