Задача "Улитка" (Решение):
Условие:
Улитка ползет по вертикальному шесту высотой h метров, поднимаясь за день на aa метров, а за ночь спускаясь на b метров. На какой день улитка доползет до вершины шеста?
|
Программа получает на вход натуральные числа h, a, b.
|
Программа должна вывести одно натуральное число. Гарантируется, что a>b.
Моё понимание решения данной задачи:
1. a - b - это КПД улитки за период 1 д+н (день + ночь);
|
2. h / (a - b) - вот за сколько дней, как я считаю, эта улитка должна доковылять до вершины
Решение, найденное в Интернете:
1. h = int(input())
|
2. a = int(input())
|
3. b = int(input())
|
4. print(int((h - a - 1) // (a - b) + 2))
Абсолютно непонятна логика, по которой автор (по всей видимости это и есть та самая СВЕТЛАЯ ГОЛОВА, которая решила назвать эту задачу не иначе как "ДЛЯ НАЧИНАЮЩИХ") решил, что эту задачу нужно решать именно так...
ИЗ ВСЕГО "int((h - a - 1) // (a - b) + 2)" МНЕ ПОНЯТНО ТОЛЬКО "(a - b)" (по всей видимости это и есть тот самый КПД, о котором я думаю)!
А вот причём здесь вот эта хрень - "h - a - 1" и почему она по мнению СВЕТЛОЙ ГОЛОВЫ должна делиться на "КПД + 2" ???
Люди, помогите мне, пожалуйста, понять ход мыслей этого хм... автора задачи! Я просто в шоке с этого товарища!!!
Python
Как понять логику решения следующей задачи "ДЛЯ НАЧИНАЮЩИХ"?
За ПОСЛЕДНИЙ день улитка проползёт a - она достигнет вершины столба ДНЁМ и ей НЕ НАДО будет спускаться. За каждый день, КРОМЕ последнего, улитка проползает a-b (a вверх, b вниз).
Если ИСКЛЮЧИТЬ последний день (за который улитка проползёт не менее a), то понадобится math.ceil((h - a) / (a - b)) дней. Чтобы правильно обработать ситуацию a > h запишем выражение в виде:
max(0, math.ceil((h - a) / (a - b)))
Таким образом, всего понадобится max(0, math.ceil((h - a) / (a - b))) + 1 день.
А теперь финт ушами. Для натуральных p и q:
math.ceil(p / q) == (p - 1) // q + 1
Подставляем это равенство в получившуюся формулу и получаем:
max(0, (h - a - 1) // (a - b) + 1) + 1
Если убрать проверку, что h может быть меньше a, получаем:
(h - a - 1) // (a - b) + 2
Если ИСКЛЮЧИТЬ последний день (за который улитка проползёт не менее a), то понадобится math.ceil((h - a) / (a - b)) дней. Чтобы правильно обработать ситуацию a > h запишем выражение в виде:
max(0, math.ceil((h - a) / (a - b)))
Таким образом, всего понадобится max(0, math.ceil((h - a) / (a - b))) + 1 день.
А теперь финт ушами. Для натуральных p и q:
math.ceil(p / q) == (p - 1) // q + 1
Подставляем это равенство в получившуюся формулу и получаем:
max(0, (h - a - 1) // (a - b) + 1) + 1
Если убрать проверку, что h может быть меньше a, получаем:
(h - a - 1) // (a - b) + 2
некоторые были на верном пути... но не дотянули..
Я не програмист, но получится, что (а-б) *(h-a)+a - по моему так должно быть
А-б - это растояние улитки за день (день+ночь)
H-a - это растояние, которое она преодолеет за всё время-1 день
+а - последний день, чтобы добратбся до верщины, с которой нам уже не интересно скатится она или нет.. хз как это в пооге выразить, но задача и правда. детсская
Прежложеное решение и правжо странное
А-б - это растояние улитки за день (день+ночь)
H-a - это растояние, которое она преодолеет за всё время-1 день
+а - последний день, чтобы добратбся до верщины, с которой нам уже не интересно скатится она или нет.. хз как это в пооге выразить, но задача и правда. детсская
Прежложеное решение и правжо странное
Николай Десятерик
А может, за 1 день эта еб@@@@ улитка преодолеет всё-таки, а не "...H-a - это растояние, которое она преодолеет за всё время-1 день..."? Почему именно ???
h, a, b = map(int, input().split())
print(h / (a - b))
Вроде бы так. Но не факт
Ну то есть, если бы не было спуска за ночь мы бы просто h // a, а тут нам
накладывает дебафф на a в виде b, => мы просто из a вычитаем b,
а делим так же
print(h / (a - b))
Вроде бы так. Но не факт
Ну то есть, если бы не было спуска за ночь мы бы просто h // a, а тут нам
накладывает дебафф на a в виде b, => мы просто из a вычитаем b,
а делим так же
почти понял
Што это? Это молитва?
В Ютубе посмотрите
Похожие вопросы
- Как понять логику решения следующей задачи (ещё и "для начинающих" называется)?
- Как научиться решать задачи на деление и остаток в Python? Не могу понять принцип решения. Примеры задач:
- Задача на поиск целых частного и делителя для заданной периодической дроби. Простенькая задача для начинающих программи
- Вопросы по программированию общие вопросы. Хочу понять логику. вопросы подробно описал в описании.
- Решение задачи по программированию (желательно питон) Сложность O(квадрат(n))
- Задача по питону для начинающих
- Математика и решения задачи
- Решение задач по python
- Python Решение задачи на нахождение центра шахматной клетки.
- Питон Тьютор, решение задачи с объяснением
Ну а пока заранее благодарю за ответ! :-)