Купить X Получить X бесплатно формулу в Python
При покупке получаешь одну бесплатную ситуацию, ее легко подсчитать, ее просто нужно было разделить на 2 на количество, которое мы хотим (например: купить 3, получить 3 бесплатно, то есть 6)
Но когда это становится более сложным, например, купить 4, получить 1 бесплатно, какой вариант покупки будет наилучшим, если мы хотим купить, скажем, 13(ответ - купить 11, потому что вы получаете 2 бесплатно)? Мне показалось интересным то, что это легко вычислить, но, если поместить его в код, я заблудился.
В Buy 4 получить 1 бесплатно, это шаблон, который я нашел, но опять же, я понятия не имею, как на самом деле поместить его в код.
По сути, я хочу сформулировать "купи Х, получи Х бесплатно", поэтому при данной ситуации будет выведен лучший вариант покупки. Например, если я хочу купить 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
. . .
. . .
. . .
1 ответ
Это довольно просто: вы хотите узнать, сколько полных упаковок и сколько неупакованных предметов вам нужно получить. Интегральное деление удобно.
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))