坚持写一点折扣功能

时间:2014-12-07 13:46:39

标签: javascript algorithm discount

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

  • 如果用户选择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逻辑运算符,但我不知道如何开始编写这个算法,我想我需要一些帮助。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

这是一些让你入门的伪代码:

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