在买一送一的情况下,计算起来很简单,只需要用2除以我们想要的数量即可(例如:免费买3送3,所以我们得到6)。
但是,当它变得更加复杂时,例如免费购买4送1,如果我们想购买说13(答案是购买11因为免费获得2),那将是最佳的购买选择?我发现有趣的是它很容易计算,但是把它写在代码中,我就迷路了。
在买四送一中,这是我发现的模式,但是同样,我也不知道如何将其实际放入代码中。
基本上,我想制定“买X送X赠品”,因此,在给定情况下,它将输出最佳购买选项。例如,如果我要购买13个,它将输出“ 11”。
the quantity we need: we only need to buy: what we end up having:
1 1 1
2 2 2
3 3 3
4 4 5
5 4 5
6 5 6
7 6 7
8 7 8
9 8 10
10 8 10
11 9 11
12 10 12
13 11 13
14 12 15
15 12 15
. . .
. . .
. . .
答案 0 :(得分:3)
这非常简单:您想查找需要包装的完整包装数量和非包装物品数量。积分除法很方便。
def buy_to_acquire(desired, buy=1, free=0):
pack = buy + free
buy_packs = desired // pack
buy_individual = desired % pack
return buy * buy_packs + buy_individual
buy_to_acquire(13, buy=4, free=1)
# => 11
备用版本不那么容易理解,但是对于计算机来说却更快一些:
import math
def buy_to_acquire(desired, buy=1, free=0):
return math.ceil(desired * buy / (buy + free))