Найти тему
Журнал «Код»

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

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

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

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

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

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

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

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

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

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

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

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

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