购物车一件商品可以使用多张优惠券,如何匹配最优?


此处优惠券都为可用券,且一件商品对应的同一个分组的优惠券只能使用一张。

从A组选择一个最优券组合(优惠金额最大)例a+e

若优惠金额远大于商品卖价则重算最优组合,直到优惠券金额最大且原优惠金额最小的组合(例一张优惠券100元,卖价1元,实际优惠1元,那么原优惠金额1元的优于这张100元的券) 如a+f
之后优惠券A组的最优券组合不变,同理计算优惠券B组
直到所有的分组计算结束,最终得出购物车的最优券组合

以上是我设想的算法逻辑,但是我对算法的理解不深,实现起来有困难。不知道当优惠金额大于卖价的时候如何通过代码重新择优。直接移除该券再次for循环判断吗?


这是我写的一个demo,感觉复杂度很高,该如何优化呢?

望回复!谢谢谢啦!我太菜啦
第一次提问题有不知道该怎么表达。感谢指点


回答:

假设有以下几种券 a - 18,b - 8,c - 6,d - 4,e - 1,前面是类型,后面是优惠金额,
购买一个10元的商品:
首先我们可以直接排除大于10元的,也就是a,这里很好处理;
然后我们对剩下的bcde进行计算,先取b,然后后续的券要满足小于(10-b),也就是2,这里可以得到be的组合为9,此时还有剩余优惠为1,再找有没有满足小于等于1的,没有就结束,有就继续找,直到剩余优惠最接近0的组合;
然后取c,后续的要满足小于等于(10-c),也就是4,这里得到cd,剩余优惠为0,直接结束;
之后取d,同上,
一直到最后的e,看有没有等于0的,有的话就结束,没有就剩余优惠最小的那一组,此时就是最佳

补充:取出小于实际金额的优惠券时,根据优惠金额从大到小排序一下,这样后续计算取n和n之后的可以了,前面的就可以跳过了,比如计算d的,就可以忽略d前面的值了


回答:

  1. 首先优惠券存在不同的类型,比如满减,折扣,要计算出每张有对应的优惠金额
  2. 按照优惠金额降序
  3. 然后将优惠些双重循环进行计算
  4. 将每一种组合最接近且小于商品总价的记录
  5. 最终选择一组组合金额最高的就行了

以上是 购物车一件商品可以使用多张优惠券,如何匹配最优? 的全部内容, 来源链接: utcz.com/p/944141.html

回到顶部