16.02 Две функции
Ошибка.
Попробуйте повторить позже
Алгоритм вычисления значения функций и
, где
— целое неотрицательное число, задан следующими
соотношениями:
, при
, если
и остаток от деления
на 2 равен 0
, если
и остаток от деления
на 2 равен 1
, если
и не делится на 3
, если
и делится на 3
, в других случаях
Определите наибольшее значение из отрезка
, при котором сумма цифр значения
равна
33.
Примечание: знак </> в данной задаче означает целочисленное деление.
Рекурсивное решение
В задаче определены две взаимно рекурсивные функции и
. Для реализации создаём две пользовательские
функции в Python с помощью
. В
базовый случай при
, где возвращаем
, для
будут два
варианта: для чётных вычисляем
, для нечётных
. В функции
при
будет
3 варианта: если
не делится на 3, используем
, если делится –
, в остальных
случаях возвращаем
. Затем перебираем
от 1000 до 1 (чтобы рассматривать сначала наибольшее
n), считаем сумму цифр
и выводим наибольшее
, у которого сумма цифр равна 33, завершаем
перебор.
def f(n): # объявляем функцию F(n) if n > 11 and n % 2 == 0: # рекурсивный случай для чётных n > 11 return g(n // 2) * 2 - f(n - 1) if n > 11 and n % 2 == 1: # рекурсивный случай для нечётных n > 11 return -g(n - 1) # базовый случай при n < 12 return n def g(n): # объявляем функцию G(n) if n < 12 and n % 3 != 0: # рекурсивный случай для n < 12 и некратных 3 return f(n - 1) + n elif n < 12 and n % 3 == 0: # рекурсивный случай для n < 12 и кратных 3 return g(n - 1) + f(n // 3) - n # все остальные случаи return n * n for i in range(1000, 0, -1): # перебор от 1000 до 1 # вычисляем модуль f(i) (чтобы отбросить знак) и обнуляем сумму s, summa = abs(f(i)), 0 while s > 0: # подсчёт суммы цифр summa += (s % 10) # забираем последнюю цифру в сумму s //= 10 # "обрезаем" последнюю цифру if summa == 33: # проверка условия print(i) # выводим наибольшее n break # завершаем цикл
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!