26.09 Прочие прототипы
Ошибка.
Попробуйте повторить позже
В магазине для упаковки подарков есть кубических коробок. Самой интересной считается упаковка подарка по
принципу матрёшки – подарок упаковывается в одну из коробок, та в свою очередь в другую коробку и т.д. Одну коробку
можно поместить в другую, если длина её стороны хотя бы на
единицы меньше длины стороны другой коробки.
Определите наибольшее количество коробок, которое можно использовать для упаковки одного подарка, и максимально
возможную длину стороны самой маленькой коробки, где будет находиться подарок. Размер подарка позволяет поместить
его в самую маленькую коробку.
Входные данные
В первой строке входного файла находится число – количество коробок в магазине (натуральное число, не
превышающее
). В следующих
строках находятся значения длин сторон коробок (все числа натуральные, не
превышающие
), каждое – в отдельной строке. Запишите в ответе два целых числа: сначала наибольшее количество
коробок, которое можно использовать для упаковки одного подарка, затем максимально возможную длину стороны самой
маленькой коробки в таком наборе.
Типовой пример организации данных во входном файле
Пример входного файла приведён для пяти коробок и случая, когда минимальная допустимая разница между
длинами сторон коробок, подходящих для упаковки «матрёшкой», составляет единицы. При таких исходных
данных условию задачи удовлетворяют наборы коробок с длинами сторон
и
или
и
соответственно, т.е. количество коробок равно
, а длина стороны самой маленькой коробки равна
.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Перенесем числовые значение количества коробок в магазине куда-нибудь, где оно нам не помешает. Сортируем числа
столбца по убыванию. Выделим полностью столбец
, перейдём в раздел Данные и нажимаем на инструмент Удалить
дубликаты, в появившемся окне выбираем Выделить все и нажимаем ОК (это удалит коробки, которые были по записаны
несколько раз). Запишем для первых ячеек максимальный размер подарка, который закончится на данной коробке. В
ячейку
запишем формулу =МАКС(ЕСЛИ(A3-A4>=3;B3+1;1);ЕСЛИ(A2-A4>=3;B2+1;1);ЕСЛИ(A1-A4>=3;B1+1;1)),
скопируем её на все свободные клеточки этого столбца. Находим маскимальное значение в столбце
. Выписываем в ответ
наибольшее количество коробок, которое можно использовать для упаковки одного подарка, затем максимально
возможную длину стороны самой маленькой коробки в таком наборе.
Идея решения
Идея решения заключается в том, что мы сначала считаем данные из файла и затем отсортируем их по убыванию, для удобства в дальнейшем. Затем мы создадим список gift, в котором будем выстраивать подарки в виде матрешки, изначально добавив в него первый элемент из отсортированного списка. Затем напишем цикл, внутри которого мы будем проверять, что разница между последним добавленным подарком в gift и текущим рассматриваемым подарком больше или равна 3. В таком случае, мы можем положить этот подарок внутрь другого подарка и тогда добавляем этот подарок в список gift. В конце программы выводим len(gift) для получения количества подарков и последний элемент списка для того чтобы получить максимальный размер последнего подарка.
Решение 2 (Python)
# Открываем файл f = open(’Задание 26.txt’) # Считываем количество подарков n = int(f.readline()) # Записываем все подарки файла в список a=[int(x) for x in f.readlines()] # Сортируем подарки по убыванию a.sort(reverse=True) # Список - матрёшка из подарков gift = [a[0]] for i in range(n): # Если разница между последним добавленным подарком в gift и текущим рассматриваемым подарком больше или равна 3 if gift[-1] - a[i] >= 3: # Добавляем подарок в матрёшку gift.append(a[i]) print(len(gift), gift[-1])
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!