Как заполнить продуктами целый шкаф
medium

Как заполнить продуктами целый шкаф

Это сложно, но можно

Всё, последняя тревожная задачка месяца. Дальше задачки будут только жизнеутверждающие и позитивные. А пока — паника и тревога. В последний раз можно.

Килограммовая пачка фасоли стоит 78 рублей и занимает 0,7 литра в объёме, а такая же пачка макарон — 25 рублей и занимает 1,35 литра. У нас есть 5000 рублей. Чего и сколько нужно купить, чтобы вес итоговых продуктов получился максимальным, если в шкаф влезает не больше двухсот литров продуктов.

Эту задачку можно решить вручную с помощью математики или с помощью кода: написать программу, которая переберёт все значения и найдёт оптимальное. Гораздо проще потратить три минуты на написание кода и начальных условий, чем час на само решение.

Смысл кода будет такой: мы дадим компьютеру задание перебрать все возможные варианты и показать те, которые подходят под наши условия. Нам остаётся только найти границы для перебора и продумать условия.

Так как в шкафу всего 200 литров, то выясним, сколько максимум одного товара мы можем в него впихнуть:

фасоль — 200 / 0,7 = 285,7. Но так как 0,7 пачки не влезают, остаётся 285 пачек фасоли — максимум в шкафу.

макароны — 200 / 1,35 = 148,1. Получается, что если класть только их, то влезет 148 пачек макарон.

Теперь в этих границах мы методом простого перебора просто просмотрим все комбинации, которые можно получить. Наша задача — найти максимальный вес, который можно положить в шкаф, учитывая ограничения по объёму и бюджету. 

Для этого мы в самом начале сделаем переменную, которая отвечает за максимальный вес, и будем на каждом шаге смотреть — текущая комбинация весит больше или нет. Если больше, чем текущее значение переменной, то записываем в неё новый максимальный вес и запоминаем количество пачек каждого товара. 

Когда цикл закончится, нам останется только вывести эти значения — они и будут нашим ответом. Поехали писать код на Python:

# наш бюджет
money = 5000
# цена и объём фасоли
buckwheat_cost = 78
buckwheat_vol = 0.7
# цена и объём макарон
pasta_cost = 25
pasta_vol = 1.35
# задаём минимальные и максимальные количества упаковок каждого товара
buckwheat_all = range(0,286)
pasta_all = range(0,149)
# сюда мы положим результаты поиска
weight_max = 0
buckwheat_max = 0
pasta_max = 0
# перебираем все варианты с фасолью…
for buckwheat in buckwheat_all:
  # … и макаронами
  for pasta in pasta_all:
    # берём получившееся количество упаковок и проверяем цену и объём
    # если помещается в шкаф и бюджет и у этого набора максимальный вес на этом этапе — запоминаем значения
    if buckwheat * buckwheat_cost + pasta * pasta_cost <= 5000  and buckwheat * buckwheat_vol + pasta * pasta_vol <= 200 and buckwheat + pasta > weight_max:
      # записываем значения в нужные переменные
      buckwheat_max = buckwheat
      pasta_max = pasta
      # каждая пачка весит 1 кило, поэтому для веса нам нужно просто сложить общее количество пачек
      weight_max = buckwheat + pasta
# в конце просто выводим то, что даст нам максимальный результат
print('Максимальный вес: ', weight_max, ' кг., пачек фасоли: ',buckwheat_max,', пачек макарон: ', pasta_max)

Запустите код, чтобы узнать правильный ответ. Есть ещё и второй, но нашему коду достаточно первого.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
medium