【问题标题】:Stuck writing a little discounts function卡住写一点折扣功能
【发布时间】:2014-12-07 13:46:39
【问题描述】:

我需要编写一个函数来计算网站中某些选定项目的虚拟值。

  • 如果用户选择 1 项,则没有折扣,值为 1。
  • 如果用户选择 8 件商品,会有一点折扣,价值为 7。
  • 如果用户选择 24 件商品,会有一点折扣,价值为 20。
  • 如果用户选择 40 件商品,会有一点折扣,价值为 30。
  • 如果用户选择 80 件商品,会有一点折扣,价值为 50。

这些是唯一存在的 4 个折扣,但它们可以累积,因此如果用户选择 110 (80+24+6),则值应为 (50+20+6)。让我们看一些其他的例子:

  • 如果用户选择 5 个项目,则值为 5。
  • 如果用户选择 12 项,则值为 7+4 = 11。
  • 如果用户选择 23 项,则值为 7+7+7 = 21。
  • 如果用户选择 24 项,则值为 20。
  • 如果用户选择了 77 个项目,则值将是 30+20+7+5 = 62。
  • 如果用户选择了 88 个项目,则值为 50+7 = 57。

我希望我自己解释了。我猜我需要使用 mod 逻辑运算符,但我不知道如何开始编写这个算法,我想我需要一点帮助。

【问题讨论】:

  • 23的值不应该是21吗? 23 = 8 + 8 + 7 -> 7 + 7 + 7 = 21。
  • 你是对的,已编辑

标签: javascript algorithm discount


【解决方案1】:

Javascript 不是我常用的编程语言,但这样的东西应该可以工作。

这个想法是每次都应用最好的折扣。要知道您可以应用折扣多少次,您只需将剩余购买的商品与应用折扣所需的商品之间的商除以,即如果您有 17 件商品并且需要应用 8、17 的折扣/8 = 2,剩下 1 个项目。然后,一旦您知道应用了多少次折扣,就减去这些项目并继续前进。

function calculate_price(total_items) {
  var needed =  [1, 8, 24, 40, 80];
  var price = [1, 7, 20, 30, 50];

  var total = 0;
  for (var i = needed.length - 1; i >= 0; --i) {
    var qtt = Math.floor(total_items/needed[i]);
    total_items -= qtt*needed[i];
    total += qtt*price[i];
  }
  return total;
}

【讨论】:

    【解决方案2】:

    这里有一些伪代码可以帮助您入门:

    remainder = initial value
    total = 0
    
    array of discount objects ordered descending by discount i.e. [{ level: 80, amount: 50 }, { level: 40, amount: 30 }, etc.]
    
    loop over array doing the following calculation:
        get total number of discounts to apply at this level (divide remainder by current level and round down)
        add total number of discounts times the current level's amount to the total value
        set remainder to what's left (current remainder mod current level)
    
    add the remainder after the loop has run to the total calculated so far
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2018-02-26
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多