题目解析
本题的解题思路如下,首先实现满减,打折,无门槛的逻辑:
- 满减逻辑,只要总价price大于等于100,且还有满减券,则不停price -= Math.floor(price / 100) * 10; 直到总价price小于100,或者满减券用完。
- 打折逻辑,按照题目意思,打折券只能使用一次,因此无论打折券有多少张,都只能使用一次,因此只要打折券数量大于等于1,那么price = Math.floor(price * 0.92);
- 无门槛逻辑,只要总价price大于0,且还有无门槛券,则不停price -= 5; 直到price小于等于0,或者无门槛券用完。
接下来就是求上面三种逻辑的任选2个的排列:
假设满减是M,打折是N,无门槛是K,则有排列如下:
- MN、NM
- MK、KM
- NK、KN
注意,券的使用对顺序敏感。
因此,求出以上排列后,对每个人的总价使用六种方式减价,只保留减价最多,用券最少的那个。
优化思路:
对于无门槛券的使用,无门槛券总是在最后使用才会最优。
对于满减来说,无门槛肯定是最后使用最优惠,
对于92折来说,
- 先用无门槛后打折(x-5y)*0.92 = x*0.92 - 5*0.92*y
- 先打折后用无门槛 x*0.92 -