Купить X Получить X бесплатно формулу в Python - PullRequest
0 голосов
/ 05 декабря 2018

При покупке получаешь одну бесплатную ситуацию, ее легко подсчитать, ее просто нужно было разделить на 2 на количество, которое мы хотим (например: купить 3, получить 3 бесплатно, поэтому мы получаем 6).

Но когда все становится сложнее, например, купить 4, получи 1 бесплатно, какой вариант покупки будет лучшим, если мы хотим купить, скажем, 13 (ответ - купить 11, потому что ты получаешь 2 бесплатно)?Мне показалось интересным то, что это легко вычислить, но, если поместить его в код, я потерялся.

При покупке 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 Ответ

0 голосов
/ 05 декабря 2018

Это довольно просто: вы хотите узнать, сколько полных упаковок и сколько неупакованных предметов вам нужно получить.Интегральное деление удобно.

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))
...