1. Главная
  2. Библиотека
  3. Программирование
  4. Посреди комнаты лежит куча игрушек (в глобальной переме...
Разбор задачи

Посреди комнаты лежит куча игрушек (в глобальной переменной heap). И каждый ваш поход в магазин сопровождается добавлением к куче ещё некоторого количества игрушек. Нужно, наконец, разложить их все по коробкам. Функция labelling() принимает список чисел —

  • Предмет: Программирование
  • Автор: Кэмп
  • #Основы алгоритмизации и программирования
  • #Структуры и алгоритмы обработки данных
Посреди комнаты лежит куча игрушек (в глобальной переменной heap). И каждый ваш поход в магазин сопровождается добавлением к куче ещё некоторого количества игрушек. Нужно, наконец, разложить их все по коробкам. Функция labelling() принимает список чисел —

Условие:

Посреди комнаты лежит куча игрушек (в глобальной переменной heap). И каждый ваш поход в магазин сопровождается добавлением к куче ещё некоторого количества игрушек. Нужно, наконец, разложить их все по коробкам.

Функция labelling() принимает список чисел — игрушек, которые вы купили в очередной раз.
Добавьте их к общей куче, а затем отсортируйте все вместе. Теперь начнём раскладывать по коробкам.

В первую коробку сложим первые в списке игрушки так, чтобы их общая сумма не превышала 10. Затем берём следующую коробку размером 20 и складываем в неё игрушки с начала списка, чтобы их общая сумма не превышала 20.

Коробок с размерами 10, 20, 30 и так далее есть ровно по одной.

После того, как сложите все игрушки, верните полученный список списков (коробки в нём идут по возрастанию размера, числа в каждой коробке тоже по возрастанию).
Каждый следующий вызов функции добавляет свои игрушки к куче и заново сортирует и раскладывает по коробкам.

Решение:

Здравствуйте! Это интересная задача, требующая управления состоянием (кучей игрушек) без использования глобальных переменных, что обычно достигается через классы или замыкания. Поскольку в условии явно указано, что функция labelling() должна обновлять состояние "общей кучи" при каждом вызове, мы реализуем это с помощью класса, который будет хранить состояние кучи.

В Python для сохранения состояния между вызовами функции без использования global лучше всего подходит класс. Мы создадим класс, например, ToyBoxManager, у которого будет поле для хранения кучи (heap) и метод labelling()...

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

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какой подход является наиболее подходящим для сохранения состояния (например, общей кучи игрушек) между последовательными вызовами функции `labelling()` в Python, если требуется избежать использования глобальных переменных?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод