Мини-урок · перед практикой

Утренняя пробежка

Первый день уже считается; затем моделируем ежедневный рост.

Как к ней подойти

Разберитесь, как повторять действие, пока выполняется условие, и вовремя остановить цикл.

Коротко о теме

Цикл while продолжается, пока условие истинно. Продумайте, какое значение меняется на каждом шаге и почему цикл когда-нибудь завершится. Проверяйте как обычный ввод, так и случай, когда тело цикла выполняется ноль раз.

Ключевая идея · Точные рациональные числа

Рациональное представление десятичного ввода даёт точное сравнение, но числители и знаменатели растут.

Проверьте перед запуском

  • Если x уже не меньше y, ответ 1. Предполагается положительный начальный пробег.

Сравните свой подход

Ниже - готовое решение, другой способ, если он есть, и важные детали проверки.

Ваше принятое решение

Рекомендуемое решение: Точные рациональные числа

Рациональное представление десятичного ввода даёт точное сравнение, но числители и знаменатели растут.

from fractions import Fraction
x = Fraction(input())
y = Fraction(input())
day = 1
while x < y:
    x *= Fraction(11, 10)
    day += 1
print(day)

Время: O(d) операций над растущими целыми числами. Память: O(d + B) бит, B — размер исходных чисел.

Другой способ: Цикл с Decimal

Десятичный множитель устраняет типичные двоичные погрешности около 10% на учебных данных. Decimal использует конечную точность контекста.

from decimal import Decimal
x = Decimal(input())
y = Decimal(input())
day = 1
while x < y:
    x *= Decimal("1.1")
    day += 1
print(day)

Время: O(d) десятичных умножений, d — число дней. Память: O(1) десятичных чисел при фиксированной точности.