Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68

Служба доставки

30.04.2024, 12:36. Показов 3289. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В службе доставки n этажей. Чтобы ускорить доставку посылок нетерпеливым получателям, было решено сбрасывать посылки из окон службы доставки курьерам. Однако, начиная с какого-то этажа, посылки начинают разбиваться. Известно, что если посылка разбивается при сбрасывании с этажа
a, то она также разбивается при сбрасывании с любого этажа b>a. При сбрасывании с последнего этажа посылка гарантировано разобьется. Прочность всех посылок одинаковая.

Вам было поручено определить, с какого максимального этажа можно сбрасывать посылки. Для этого, службы доставки выделила вам 2 посылки, на которые вы можете сбрасывать, чтобы узнать ответ. Вы можете разбить обе посылки, но в результате вы должны абсолютно точно определить этот максимальный безопасный этаж.

Определите, какого числа бросков достаточно, чтобы заведомо решить эту задачу.

Формат входных данных
На вход программе дается натуральное число n – количество этажей в службе доставки.

Формат результата
Требуется вывести наименьшее число бросков, с помощью которого можно гарантировано решить задачу.

Примеры
Входные данные
5
Результат работы
3
Входные данные
6
Результат работы
3


Нужно решить задачу используя тему Рекурсия
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.04.2024, 12:36
Ответы с готовыми решениями:

В ожидании доставки
День добрый, дорогие друзья. Столкнулся с задачей на Яндекс.Контесте. Ее суть изложил ниже. В ожидании доставки Сегодня в N...

Фиксированная служба
Сколько существует K-значных чисел с суммой цифр равной S? Числа берутся в десятичной системе счисления. Ведущие нули допустимы. ...

Стоимость заказа с учетом доставки
Помогите пожалуйста решить задачу: Минимальная сумма заказа составляет 350 р. Если сумма заказа меньше 1000 р., то стоимость доставки...

24
32 / 24 / 11
Регистрация: 03.06.2023
Сообщений: 56
30.04.2024, 13:09
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from functools import cache
 
 
@cache
def get_unsafe_floor(max_floor: int, *, _initial: int = ...) -> int:
    if _initial == Ellipsis:
        _initial = max_floor
 
    if max_floor == 1:
        return 1
    if max_floor == 2:
        return int(max_floor != _initial) + 1
 
    return 1 + max(
        get_unsafe_floor(max_floor // 2 - int(not max_floor % 2), _initial=_initial),
        get_unsafe_floor(max_floor - max_floor // 2 - max_floor % 2, _initial=_initial)
    )
0
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68
30.04.2024, 14:00  [ТС]
неверный ответ, и еще нельзя использовать cache
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
30.04.2024, 18:53
Python
1
2
3
4
5
6
7
def fun(k):
    if k <= 2:
        return 1
    return fun(k-2) + 1
 
n = int(input('n = '))
print(fun(n))
1
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68
30.04.2024, 21:09  [ТС]
idealist, благодарю за ответ, но ваша программа выполняет работу только на двух примерах из задачи, в остальных случаях входных данных программа не работает по алгоритму задачи
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
30.04.2024, 21:40
Цитата Сообщение от oxwaze Посмотреть сообщение
в остальных случаях входных данных программа не работает по алгоритму задачи
А как вы это узнали?
0
0 / 0 / 0
Регистрация: 28.03.2024
Сообщений: 68
30.04.2024, 22:03  [ТС]
т.к программа которая проверяет решение задач выдает неверный ответ в 3 тесте, что и означает что код работает только с двумя вариантами входных данных
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
04.05.2024, 16:57
Еще один тест

Ввод: 4
Вывод: 2

и это тоже ведь не просто так известно
Цитата Сообщение от oxwaze Посмотреть сообщение
службы доставки выделила вам 2 посылки
0
0 / 0 / 0
Регистрация: 28.04.2024
Сообщений: 15
04.05.2024, 18:06
Цитата Сообщение от oxwaze Посмотреть сообщение
неверный ответ, и еще нельзя использовать cache
В коде строки, содержащие слово cache (1 и 4) можно поменять на
from functools import lru_cache
@lru_cache()
Все равно в итоге не все тесты проходит
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
04.05.2024, 18:42
Такие рассуждения:
Python
1
2
3
4
5
6
7
8
9
10
def fun(k, c):
    if k == 1:
    # бросок с первого этажа это передача из рук в руки через окно, она безопасна
        return 0
    return fun((k+1) // 2, c) + 1
    # Здесь число неизвестных этажей k,
    # Нужно взять половину из них с округлением в большую сторону (k+1) // 2
    # При этом уже сделано c бросков. И учесть данный бросок (+ 1)
n = int(input())
print(fun(n, 0))
0
0 / 0 / 0
Регистрация: 28.04.2024
Сообщений: 15
04.05.2024, 18:51
Цитата Сообщение от palva Посмотреть сообщение
Такие рассуждения:
def fun(k, c):
if k == 1:
# бросок с первого этажа это передача из рук в руки через окно, она безопасна
return 0
return fun((k+1) // 2, c) + 1
# Здесь число неизвестных этажей k,
# Нужно взять половину из них с округлением в большую сторону (k+1) // 2
# При этом уже сделано c бросков. И учесть данный бросок (+ 1)
n = int(input())
print(fun(n, 0))
Падает на 5 тесте. Для округления в большую сторону наверное надо int(ceil((k+1)/2))
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
04.05.2024, 19:10
Цитата Сообщение от letitsnow Посмотреть сообщение
Для округления в большую сторону
Я хотел обойтись целой арифметикой. Если можно плавающую, то можно и ceil. Только тогда просто ceil(k/2). ceil сама по себе возвращает целое число. И импорт добавить. Правда здесь ничего измениться не должно.
0
0 / 0 / 0
Регистрация: 28.04.2024
Сообщений: 15
04.05.2024, 19:25
По условию не совсем непонятно. "при сбрасывании с последнего этажа посылка гарантировано разобьется". То есть, если в здании всего 2 этажа, то количество бросков равняется нулю(с верхнего разбивается, с нижнего - бросок безопасный)?

Добавлено через 7 минут
Цитата Сообщение от palva Посмотреть сообщение
Я хотел обойтись целой арифметикой
Теперь понял

Добавлено через 5 минут
По вашему алгоритму при n==6 сбрасываем с 6, 3, 2 этажей. 3 броска? может с 6 не нужно сбрасывать а начинать сбрасывать с 5, потом 3,2?
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
04.05.2024, 19:36
При n = 2 все равно нужно проверять первый этаж. Поэтому ответ 1
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
04.05.2024, 19:52
Концепция сменилась.
Python
1
2
3
4
5
6
7
8
9
10
def fun(k):
    # k число неизвестных этажей
    if k == 1:
        return 1 # один бросок
    return fun((k+1) // 2) + 1
    # Если число неизвестных этажей k, один бросок уполовинит их
    # с округлением в большую сторону (для учета худшего случая) (k+1) // 2.
    # И учесть данный бросок (+ 1)
n = int(input())
print(fun(n-1)) # первый этаж уже известен
Но теперь тесты не проходят. n=6. Как здесь можно обойтись тремя бросками -- не понимаю. Даже если считать первый этаж заведомо безопасным. Хорошо, имеем 5 неизвестных этажей, каждый бросок уполовинивает. 5 3 2 1

Добавлено через 2 минуты
1 в конце это не первый этаж, это число неизвестных этажей, потребуется еще 1 бросок. Всего четыре.
А первый этаж выброшен при самом первом обращении к функции внизу.
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
04.05.2024, 20:19
При n = 6 сначала проверяем 3-й.
Если разбилась коробка, проверять придется и 1-й, и 2-й этажи. Если не разбилась, проверять придется и 4-й, и 5-й. Итого в любом случае максимально может получиться 3 броска.
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
04.05.2024, 20:40
thyrex, да, понятна идея. При броске мы не просто уполовиниваем, поскольку этаж, с которого бросили тоже становится известным. Сначала вычитаем 1, а потом уполовиниваем. Или, если короче, просто надо округлять в меньшую сторону.
Python
1
2
#
    return fun(k // 2) + 1
Теперь приведенные тесты проходят.
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
04.05.2024, 20:53
Цитата Сообщение от palva Посмотреть сообщение
Теперь приведенные тесты проходят.
Для 4 не проходит

Добавлено через 4 минуты
Да и для n = 1 правильный ответ 0
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
04.05.2024, 20:54
Python
1
2
3
4
5
6
7
8
9
10
11
12
def fun(k):
    # k число неизвестных этажей
    if k == 0:
        return 0
    if k == 1:
        return 1 # один бросок
    return fun(k // 2) + 1
    # Если число неизвестных этажей k, один броск уполовинит их
    # с округлением в меньшую сторону в худшем случае k // 2.
    # И учесть данный бросок (+ 1)
n = int(input())
print(fun(n-1)) # первый этаж уже известен
4
Вывод
2
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
04.05.2024, 20:56
Начиная с n = 9 тоже ответы будут неверные.

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
# первый этаж уже известен
ошибочное мнение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2024, 20:56
Помогаю со студенческими работами здесь

Python Selenium ввод номера квартиры в адрес доставки
Добрый день! Прошу помочь, не могу справиться с задачей заполнения адреса доставки, а точнее введения квартиры в соответствующее поле...

Парсинг. Как отправит ПОСТ запрос в калькулятор цены доставки и получить цену
Есть сайт: https://onexglobal.com/tariffs В нем есть форма для отправки веса и на выходе получается итоговая цена. У меня уже написана...

Служба Python
Я написал программу которая каждые пару минут выполняет системную команду с помощью os.system() и сделал её службой, но будучи службой при...

Конфигурация Служба доставки
Может ли кто поделиться самописной конфигурацией &quot;Служба доставки&quot;?

настраиваемая служба доставки
Добрый день, подскажите пожалуйста, можно ли привязать настраиваемую службу доставки к определенному разделу в битриксе? Например, при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru