Информатика. ЕГЭ

Задание 16. Информатика. ЕГЭ. Поляков-4970

Просмотры: 55
Изменено: 15 августа 2026

Алгоритм вычисления значения функции \(F(n),\) где \(n\) – целое неотрицательное число, задан следующими соотношениями:

  • \(F(0) = 8\)
  • \(F(n) = 5 + F(n \, / \, 3),\) если \(n > 0\) и \(n\) делится на \(3\)
  • \(F(n) = F(n \, // \, 3)\) в остальных случаях

Здесь \(//\) означает деление нацело. Определите количество значений \(n\) на отрезке \([1,~100~000~000],\) для которых \(F(n) = 18.\)

Решение:

Минимальное значение функции \(F(n)\) равно \(8.\) Если число не кратно \(3,\) то просто отбрасывается последняя цифра в троичной записи этого числа, если же число делится на \(3,\) т.е. в троичной записи оно оканчивается на ноль, то к значению функции добавляется \(5.\) Т.о. функция \(F(n) = 18\) только для тех чисел, у которых в троичной записи присутствует ровно два нуля.

Python

Динамическое программирование


n = 100000000
tr = ""
while n > 0:
    tr = str(n % 3) + tr
    n //= 3

# Стартовое состояние
# Структура ключа: (zeros, is_less, is_started)
# zeros - количество значащий нулей
# is_less - было ли число меньше границы предыдущего состояния
# is_started - начали ли мы собирать "живые" числа
dp = {(0, 0, 0): 1}

# Идем по всем разрядам троичного числа
for c in tr:
    max_dig = int(c)
    next_dp = {}

    for (zeros, is_less, is_started), count in dp.items():
        # Определяем, какие цифры мы имеем право поставить в текущий разряд
        m = 2 if is_less else max_dig

        for d in range(m + 1):
            new_zeros = zeros + (1 if (d == 0 and is_started) else 0)
            new_is_less = is_less or (d < max_dig)
            new_is_started = is_started or (d > 0)

            state = (new_zeros, int(new_is_less), int(new_is_started))

            next_dp[state] = next_dp.get(state, 0) + count

    dp = next_dp

    # В конце собираем ответ: нам нужны состояния, где ровно 2 нуля и число началось
    # Флаг is_less может быть любым (0 или 1)
ans = dp.get((2, 0, 1), 0) + dp.get((2, 1, 1), 0)

print(ans)

Ответ: \(5201982\)

Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене

Новое видео
Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»
Поддержать автора сайта!
​ Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.
Расписание пробников Статграда в 2026/27 учебном году
Информатика ОГЭ 9 класс
  1. 13 октября 2026 года
  2. 3 декабря 2026 года
  3. 21 января 2027 года
  4. 19 февраля 2027 года
  5. 23 марта 2027 года
  6. 27 апреля 2027 года
Математика ОГЭ 9 класс
  1. 23 сентября 2026 года
  2. 1 декабря 2026 года
  3. 22 января 2027 года
  4. 3 марта 2027 года
  5. 14 апреля 2027 года
Физика ОГЭ 9 класс
  1. 19 октября 2026 года
  2. 10 декабря 2026 года
  3. 29 января 2027 года
  4. 17 марта 2027 года
  5. 22 апреля 2027 года
Математика ЕГЭ 10 класс
  1. 3 февраля 2027 года
  2. 11 мая 2027 года
Информатика ЕГЭ 11 класс
  1. 22 октября 2026 года
  2. 15 декабря 2026 года
  3. 26 января 2027 года
  4. 2 марта 2027 года
  5. 13 апреля 2027 года
Математика ЕГЭ 11 класс
  1. 30 сентября 2026 года
  2. 17 декабря 2026 года
  3. 9 февраля 2027 года
  4. 16 марта 2027 года
  5. 21 апреля 2027 года
Физика ЕГЭ 11 класс
  1. 14 октября 2026 года
  2. 16 декабря 2026 года
  3. 4 февраля 2027 года
  4. 12 марта 2027 года
  5. 9 апреля 2027 года