Тема 16. Рекурсивные алгоритмы

16.01 Одна функция

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела рекурсивные алгоритмы
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#30460

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

F (0) = 0

F (n) = 1+ F (n − 1)  если n > 0  и n  нечётное

F (n) = F(n∕2)  в остальных случаях

Определите количество значений n  на отрезке [1, 1000000000], для которых F (n) = 3

Показать ответ и решение

Если внимательно посмотреть на перебор до 1000 например, то можно заметить, что у подходящих чисел ровно три единицы в 2 системе счисления. Значит эта рекурсия подсчитывает количество единиц в 2-сс.

Также мы знаем, что единицы в 2-сс появляются так: 2 умножаем на какую-то степень n и получаем единичку.

Например число 7: 22 + 21 + 20 = 4+ 2 +1  . И в 2-сс выглядит как 1112  . Как раз три единицы.

Также, чтобы получить единицы на трех разных местах мы должны возводить двойки в разные степени и складывать эти числа (как мы уже выяснили на числе 7).

ans = 0
for i in range(31):
    for j in range(i + 1, 31):
        for k in range(j + 1, 31):
            # Строим число с единицами в позициях i, j, k
            s = 2 ** i + 2 ** j + 2 ** k
            # Проверяем попадание в диапазон
            if 1 <= s <= 10 ** 9:
                ans += 1
print(ans)

Также можно увидеть, что ответ равен C3  = 4060
  30  .

Все потому что  30
2  больше миллиарда, но если поставить 3 первые единицы на позициях в 2-сс и остальные нули, то получим число меньше миллиарда.

Ответ: 4060

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!