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