This media is not supported in your browser
VIEW IN TELEGRAM
Задача 23 номера с сайта kompege.ru автор: М. Ишимов
Интересная, но не очень сложная, рекомендую ознакомиться!
Код решения:
def F(a, b, flag):
if a >= b:
return a == b
if flag == "B":
return F(a + 2, b, "A") + F(a * 3, b, "C")
return F(a+2, b, "A") + F(a**2, b, "B") + F(a*3, b, "C")
print(F(2, 64, 0))
Please open Telegram to view this post
VIEW IN TELEGRAM
#kege #yandex
#reshu #statgrad
#polyakov
#ЕГЭ1 #ЕГЭ10 #ЕГЭ19
#ЕГЭ2 #ЕГЭ11 #ЕГЭ20
#ЕГЭ3 #ЕГЭ12 #ЕГЭ21
#ЕГЭ4 #ЕГЭ13 #ЕГЭ22
#ЕГЭ5 #ЕГЭ14 #ЕГЭ23
#ЕГЭ6 #ЕГЭ15 #ЕГЭ24
#ЕГЭ7 #ЕГЭ16 #ЕГЭ25
#ЕГЭ8 #ЕГЭ17 #ЕГЭ26
#ЕГЭ9 #ЕГЭ18 #ЕГЭ27
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Статград
Уровень: Средний
У исполнителя есть три команды, которые обозначены буквами:
A. Вычесть 1
B. Разделить на 2
С. Разделить на 3
Команда B может быть исполнена только для чётного числа, команда C –
только для числа, кратного 3.
Сколько существует программ, которые преобразуют исходное число 19
в число 1 и при этом траектория вычислений не содержит чисел 12 и 15?
def F(a, b):
A, B, C = 0, 0, 0
if a <= b or a == 12 or a == 15:
return a == b
A = F(a - 1, b)
if a % 2 == 0:
B = F(a // 2, b)
if a % 3 == 0:
C = F(a // 3, b)
return A + B + C
print(F(19, 1))
# Ответ: 43
def F(a, b):
Определение функции с именем F, которая принимает два аргумента a и b.
A, B, C = 0, 0, 0
Инициализация переменных A, B, C с начальным значением 0.
if a <= b or a == 12 or a == 15:
Проверка условия: если a меньше или равно b, или a равно 12, или a равно 15, то выполнить следующий блок кода.
return a == b
Возврат результата сравнения a и b (логическое значение True или False).
A = F(a - 1, b)
Вызов функции F с аргументами a - 1 и b и присвоение результата переменной A.
if a % 2 == 0:
Проверка условия: если a делится на 2 без остатка.
B = F(a // 2, b)
Вызов функции F с аргументами a // 2 и b и присвоение результата переменной B.
if a % 3 == 0:
Проверка условия: если a делится на 3 без остатка.
C = F(a // 3, b)
Вызов функции F с аргументами a // 3 и b и присвоение результата переменной C.
return A + B + C
Возврат суммы значений переменных A, B, C.
print(F(19, 1))
Вызов функции F с аргументами 19 и 1 и вывод результата выполнения функции.
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: PRO100 ЕГЭ
Уровень: Средний
У исполнителя есть три команды:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу.
Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?
from functools import *
@lru_cache(None)
def F(a, b):
if a >= b or a == 100:
return a == b
R = []
if a % 10 != 0:
R.append(F(a + a % 10, b))
if a % 68 != 0:
R.append(F(a + a % 68, b))
R.append(F(a ** 2, b))
return sum(R)
print(F(2, 68) * F(68, 680))
# Ответ: 47997789947424
from functools import *
Импортируются все функции из модуля functools.
@lru_cache(None)
Декоратор @lru_cache(None) используется для кеширования результатов вызовов функции F, чтобы избежать повторных вычислений для одних и тех же аргументов.
def F(a, b):
Объявляется функция F с параметрами a и b.
if a >= b or a == 100:
Проверяется условие: если a больше или равно b, или a равно 100, то функция возвращает True.
R = []
Создается пустой список R, в который будут добавляться результаты вычислений.
if a % 10 != 0:
Если остаток от деления a на 10 не равен 0.
R.append(F(a + a % 10, b))
Добавляется результат вызова F с аргументом a + a % 10 и b.
if a % 68 != 0:
Если остаток от деления a на 68 не равен 0.
R.append(F(a + a % 68, b))
Добавляется результат вызова F с аргументом a + a % 68 и b.
R.append(F(a ** 2, b))
Добавляется результат вызова F с аргументом a в квадрате и b.
return sum(R)
Функция возвращает сумму всех элементов в списке.
print(F(2, 68) * F(68, 680))
Выводится произведение результатов вызовов F с аргументами (2, 68) и (68, 680).
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пробник ИМЦ СПб 2023
Уровень: Средний
У Троечки есть две команды:
1. Вычесть 3
2. Умножить на -3
Сколько различных отрицательных результатов можно получить из исходного числа 333 в ходе исполнения программы, содержащей ровно 13 команд?
Для решения этого номера необходимо создать глобальный список или множество, чтобы собрать все подходящие числа.
my_set = set()
def F(a, k):
if k == 13:
my_set.add(a)
return 0
return F(a - 3, k+1) + F(a * -3, k+1)
F(333, 0)
print(len([x for x in my_set if x < 0]))
# Ответ: 2224
my_set = set()
Создается пустое множество my_set, которое будет использоваться для хранения уникальных значений.
def F(a, k):
Объявляется функция F с двумя параметрами a и k.
if k == 13:
Проверяется условие: если k равно 13, то текущее значение a добавляется в множество my_set, и функция возвращает 0.
return F(a - 3, k+1) + F(a * -3, k+1)
Функция вызывает себя рекурсивно дважды, уменьшая a на 3 и умножая его на -3, а также увеличивая k на 1. Результаты обоих вызовов складываются и возвращаются.
F(333, 0)
Вызывается функция F с аргументами 333 и 0, запуская процесс рекурсивного вычисления.
print(len([x for x in my_set if x < 0]))
Выводится длина списка, содержащего элементы из my_set, которые меньше 0.
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Попков
Уровень: Сложный
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Приписать справа двоичную запись остатка от деления на 5
Сколько существует программ, которые преобразуют исходное число 1_2 в число 101000101_2 ?
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(int(f'{a:b}' + f'{(a % 5):b}', 2), b)
print(F(1, int('101000101', 2)))
# Ответ: 53669
def F(a, b):
Объявляется функция F с двумя параметрами a и b.
if a >= b:
Проверяется условие: если a больше или равно b, то возвращается результат сравнения a == b.
return F(a+1, b) + F(int(f'{a:b}' + f'{(a % 5):b}', 2), b)
Если a < b, функция вызывает себя рекурсивно два раза: с увеличенным на 1 значением a и с результатом вычисления значения, составленного из двоичного представления a и двоичного представления остатка от деления a на 5, преобразованных в число и переданных повторно в виде двоичной строки b.
print(F(1, int('101000101', 2)))
Вызывается функция F с параметрами 1 и целым числом, полученным из двоичной строки '101000101'. Результат выводится на экран.
Поставь лайк, если разбор оказался полезным
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Базовый шаблон решения задачи:
def F(a, b):
"""
Args:
a - начало
b - конец перебора
Returns:
сумму траекторий от a до b
"""
if a > b or a == 11 or a == 12:
return 0
elif a == b:
return 1
else:
return F(a + 1, b) + F(a * 2, b)
print(F(2, 10) * F(10, 40))
Не понимаю, почему никто (из студентов) не использует такой вариант шаблона, он короче и проще:
def F(a, b):
if a >= b or a == 11 or a == 12:
return a == b
return F(a + 1, b) + F(a * 2, b)
print(F(2, 10) * F(10, 40))
if a >= b: return a==b
Если мы попали из начала в конец или превысили его, то вернем логическое тождество, которое возвращает True или False (1 и 0 для нашей суммы программ).
print(F(2, 10) * F(10, 40))
Гарантируем, что число 10 содержится в траектории
if a >= b or a == 11 or a == 12
Проверяем, что числа 11 и 12 не содержатся в траектории.
Информатика ЕГЭ | itpy
Поддержать автора: boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: А. Брейк
Уровень: Сложный
1. Вычесть 1
2. Вычесть 2
3. Извлечь корень
Третья команда — извлекает из числа квадратный корень, если число является квадратом любого числа.
Сколько различных результатов можно получить из числа 113 в ходе программы, содержащей 17 команд?
Обратите внимание, что просят найти кол-во команд!
from functools import *
my_set = set()
@lru_cache(None)
def F(x, c):
if c == 17:
my_set.add(x)
return 0
if x > 0:
if round(x**0.5) == x**0.5:
return F(x - 1, c + 1) + F(x - 2, c + 1) + F(x ** 0.5, c + 1)
return F(x-1, c+1) + F(x-2, c+1)
F(113, 0)
print(len(my_set))
# Ответ: 6537515
from functools import *
Импорт всех функций из модуля.
my_set = set()
Создание пустого множества my_set, которое будет использоваться для хранения уникальных значений.
@lru_cache(None)
Декоратор для кеширования результатов выполнения функции. None означает, что будет использоваться неограниченный кеш.
def F(x, c):
Объявление функции F, которая принимает два аргумента: x и c.
if c == 17:
Проверка условия: если c равно 17.
my_set.add(x)
Добавление значения x в множество my_set.
return 0
Конец выполнения функции для определенного значения c.
if x > 0:
Проверка условия: если x больше нуля.
if round(x**0.5) == x**0.5:
Проверка условия: если квадратный корень числа x является целым числом.
return F(x - 1, c + 1) + F(x - 2, c + 1) + F(x ** 0.5, c + 1)
Рекурсивный вызов функции с различными параметрами в зависимости от условий.
return F(x-1, c+1) + F(x-2, c+1)
Рекурсивный вызов функции F с измененными параметрами.
F(113, 0)
Вызов функции F с начальными значениями.
print(len(my_set))
Вывод количества уникальных элементов в множестве.
Аудио мини-комментарий к коду решения оставлю в комментариях
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Уровень: Средний
Задач из ОГЭ, 5 номер, но считаю её весьма полезной, так как это усложненная вариация 23 номера ЕГЭ.
1. раздели на 2
2. вычти 1
Составьте алгоритм получения из чиcла 65 числа 4, содержащий не более 5 команд. В ответе запишите только номера команд.
Аудио с пояснением к коду решения оставлю в комментариях.
def F(a, b, t):
if a < b or len(t) > 5:
return 0
elif a == b and len(t) <= 5:
print(t)
return 1
else:
return F(a / 2, b, t+'1') + F(a-1, b, t+'2')
F(65, 4, '')
# Ответ: 21111
def F(a, b, t):
Определение функции F с тремя параметрами a, b, и t.
if a < b or len(t) > 5:
Проверка условия: если a меньше b или длина строки t превышает 5 символов.
return 0
Возврат значения 0, если условие из пункта 2 истинно.
elif a == b and len(t) <= 5:
Другое условие: если a равно b и длина строки t не превышает 5 символов.
print(t)
Вывод текущего состояния строки t.
return 1
Возврат значения 1, если условие из пункта 4 истинно.
else:
В случае, если ни одно из вышеперечисленных условий не выполнено.
return F(a / 2, b, t+'1') + F(a-1, b, t+'2')
Рекурсивный вызов функции F с различными значениями аргументов: для первого вызова a уменьшается вдвое и к строке t добавляется символ '1', для второго вызова a уменьшается на 1, к строке t добавляется символ '2'.
F(65, 4, '')
Вызов функции F с начальными значениями a=65, b=4, и пустой строкой t.
Поддержать автора: boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
А. Вычти 2
В. Найди целую часть от деления на 2
Сколько существует программ, для которых при исходном число 30 результатом является число 1, и при этом траектория вычислений содержит число 14?
def F(a, b):
if a <= b:
return a == b
return F(a-2, b) + F(a//2, b)
print(F(30, 14) * F(14, 1))
# Ответ: 36
1.
def F(a, b):
Объявление функции `F` с аргументами `a` и `b`.
2.
if a <= b:
Проверка условия: если `a` меньше или равно `b`.
3.
return a == b
Возвращение результата сравнения `a` и `b`, если они равны.
4.
return F(a-2, b) + F(a//2, b)
Возвращение суммы рекурсивных вызовов функции `F` с аргументами `a-2, b` и `a//2, b`.
5.
print(F(30, 14) * F(14, 1))
Вывод на экран произведения результатов вызовов функции `F` с аргументами `(30, 14)` и `(14, 1)`.
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)
print(F(3, 7) * F(7, 35))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)
print(F(3, 9) * F(9, 13))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин
Уровень: Средний
У исполнителя есть три команды, которым присвоены номера:
A. Прибавить 2
B. Прибавить 3
C. Умножить на 2
Сколько существует программ, для которых при исходном числе 3 результатом является число 20, а последняя в них команда - A или С?
В данной задачи для исследования порядка команд мы передаем строчный аргумент С, который принимает номера каждой новой команды. Таким образом мы можем проверить последнюю команду на условие.
def F(a,b, c: str):
if a >= b:
return a == b and c[-1] != 'B'
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
print(F(3,20,''))
# Ответ: 60
1️⃣
def F(a,b, c: str):
Объявление функции F с тремя параметрами: числовыми параметрами a, b и строковым параметром c
2️⃣
if a >= b:
Проверяем, если значение a больше или равно значению b
3️⃣
return a == b and c[-1] != 'B'
Возвращаем результат логического выражения, которое проверяет, что a равно b и последняя буква строки c не равна 'B'
4️⃣
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
В противном случае возвращаем сумму результатов рекурсивных вызовов функции F с измененными параметрами: добавляем к a значения 2, 3 и умножаем его на 2, а к строке c добавляем 'A', 'B' и 'C' соответственно
5️⃣
print(F(3,20,''))
Вызываем функцию F с начальными аргументами 3, 20 и пустой строкой, затем выводим результат вызова
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Попков
Уровень: Сложный
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Приписать справа двоичную запись остатка от деления на 5
Сколько существует программ, которые преобразуют исходное число 1_2 в число 101000101_2 ?
Конечно же сложность состоит в том, чтобы правильно понять задумку автора. Посмотрите какое классное решение получается!
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(int(f'{a:b}' + f'{a % 5:b}', 2), b)
print(F(int('1', 2), int('101000101', 2)))
# Ответ: 53669
def F(a, b):
Определяем функцию F с двумя параметрами a и b, которые являются целыми числами.
if a >= b:
Проверяем, если a больше или равно b. Это условие служит для завершения рекурсии.
return a == b
Если a равно b, возвращаем True, иначе возвращаем False.
return F(a+1, b) + F(int(f'{a:b}' + f'{a % 5:b}', 2), b)
Рекурсивно вызываем функцию F дважды с измененными параметрами и суммируем результаты.
print(F(int('1', 2), int('101000101', 2)))
Выводим результат вызова функции F, передавая ей целочисленные значения, полученные из двоичных строк '1' и '101000101'.
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
3 8 4 3
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Статград
Уровень: Сложный
Исполнитель преобразует число на экране. У исполнителя есть две команды:
A. Прибавь 1
B. Умножить на 2
Сколько существует программ, которые преобразуют исходное число 1 в число 17 и при этом траектория вычислений содержит не более 4 четных чисел?
На картинке я прикрепил два своих решения одной и той же задачи, но позже заметил, что, несмотря на то что оба варианта дают правильный ответ, один из них неверный! А именно первый вариант является неправильным, так как в нем рассматриваются все цифры, а не числа. Правильным подходом будет разбить все числа с помощью c+' '+str(a), чтобы таким образом рассматривать лишь четные числа. Будьте внимательны!
def F(a, b, c):
if a >= b:
M = [int(x) for x in c.split() if int(x) % 2 == 0]
return a == b and len(M) <= 4
return F(a+1, b, c+' '+str(a)) + F(a*2, b, c+' '+str(a))
print(F(1, 17, ''))
# Ответ: 8
def F(a, b, c):
Объявление функции F с тремя параметрами: a, b и c.
if a >= b:
Проверка, если значение a больше или равно b.
M = [int(x) for x in c.split() if int(x) % 2 == 0]
Создание списка M, который содержит четные числа из строки c, преобразуя их в целые значения.
return a == b and len(M) <= 4
Возвращение результата: True, если a равно b и количество четных чисел в M не превышает 4.
return F(a+1, b, c+' '+str(a)) + F(a*2, b, c+' '+str(a))
Рекурсивный вызов функции F для двух случаев: увеличивая a на 1 и удваивая a, добавляя текущий a в строку c.
print(F(1, 17, ''))
Вызов функции F с параметрами 1, 17 и пустой строкой, вывод результата на экран.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
4333
#kege по информатике #ЕГЭ23Автор: /dev/inf advanced
Уровень: Средний
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 3
3. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Известно, что исполнитель не может повторить команду, выполненную на предыдущем шаге. Например, если была выполнена команда 1, на следующем шаге могут быть выполнены только команды 2 или 3.
Сколько существует программ, для которых при исходном числе 1 результатом является число 25, и при этом траектория вычислений содержит число 5, но не содержит число 6?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 11, 12.
Исполнитель не может повторить команду, выполненную на предыдущем шаге.
def F(a, b, c):
if a >= b or a == 6:
return a == b
if c == '1':
return F(a + 3, b, '2') + F(a ** 2, b, '3')
if c == '2':
return F(a + 1, b, '1') + F(a ** 2, b, '3')
if c == '3':
return F(a + 1, b, '1') + F(a + 3, b, '2')
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a ** 2, b, '3')
print(F(1, 5, '') * F(5, 25, ''))
Ответ: 10
def F(a, b, c):
Создается функция F, которая принимает три аргумента.
if a >= b or a == 6:
Если текущее значение a больше или равно значению b, или a равно 6.
return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.
if c == '1':
Проверяется, равно ли значение c строке '1'.
return F(a + 3, b, '2') + F(a 2, b, '3')
Если c == '1', функция вызывает саму себя дважды.
if c == '2':
Проверяется, равно ли значение c строке '2'.
return F(a + 1, b, '1') + F(a 2, b, '3')
Если c == '2', функция вызывает саму себя дважды.
if c == '3':
Проверяется, равно ли значение c строке '3'.
return F(a + 1, b, '1') + F(a + 3, b, '2')
Если c == '3', функция вызывает саму себя дважды.
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a 2, b, '3')
Если значение c не равно '1', '2' или '3' (например, пустая строка `''`), функция вызывает саму себя трижды.
print(F(1, 5, '') * F(5, 25, ''))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10 7🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
11953
#kege по информатике #ЕГЭ23Автор: PRO100 ЕГЭ
Уровень: Средний
Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Команда А прибавляет к числу его последнюю цифру. Например, из числа 68 получится число 76.
Команда B прибавляет к числу его остаток от деления на 68. Например, из числа 10 получится число 20.
Команда C возводит число в квадрат. Например, из числа 9 получится число 81.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
from functools import lru_cache
@lru_cache(None)
def F(a, b):
if a >= b or a == 100:
return a == b
count = 0
x = a % 10
if x != 0:
count += F(a + x, b)
x = a % 68
if x != 0:
count += F(a + x, b)
x = a ** 2
if x != a:
count += F(x, b)
return count
print(F(2, 68) * F(68, 680))
Ответ: 47997789947424
from functools import lru_cache
Импортируется декоратор lru_cache из модуля functools.
@lru_cache(None)
Декоратор lru_cache применяется к функции . Параметр None означает, что кэш не имеет ограничений по размеру.
def F(a, b):
Определяется функция F, которая принимает два аргумента.
if a >= b or a == 100:
Если текущее значение a больше или равно значению b, или a равно 100.
return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.
count = 0
Создаем счетчик.
x = a % 10
Вычисляется последняя цифра числа a.
if x != 0:
Проверяется, не равна ли последняя цифра числа a нулю.
count += F(a + x, b)
Если последняя цифра числа a не равна нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.
x = a % 68
Вычисляется остаток от деления числа a на 68.
if x != 0:
Проверяется, не равен ли остаток от деления числа a на 68 нулю.
count += F(a + x, b)
Если остаток от деления числа a на 68 не равен нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.
x = a** 2
Вычисляется квадрат числа a.
if x != a:
Проверяется, не равен ли квадрат числа a самому числу a.
count += F(x, b)
Если квадрат числа a не равен самому числу a, функция вызывает саму себя с аргументами (x, b) и результат этого вызова добавляется к переменной count.
return count
Возвращается значение переменной count.
print(F(2, 68) * F(68, 680))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12 8❤6
Автор: М.Попков
Уровень: Средний
Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены латинскими буквами:
А. Вычесть 2
В. Если число четное, Разделить на 2, Иначе Вычесть 7
Сколько существует программ, для которых при исходном числе 40 результатом является число 1 и при этом никакая команда не повторяется более двух раз подряд?
Аудио с пояснением к коду решения оставлю в комментариях.
def F(a, b, s):
if a <= b:
return a == b and 'AAA' not in s and 'BBB' not in s
h = [F(a-2, b, s+'A')]
if a % 2 == 0:
h += [F(a/2, b, s+'B')]
else:
h += [F(a-7, b, s+'B')]
return sum(h)
print(F(40, 1, ''))
Ответ: 16
def F(a, b, s):
Объявление функции F с тремя параметрами: a (начальное число), b (целевое число), s (строка с последовательностью действий).
if a <= b:
Проверка, если текущее число a меньше или равно целевому числу b.
return a == b and 'AAA' not in s and 'BBB' not in s
Возвращает True только если a равно b и в строке s нет подстрок 'AAA' и 'BBB', иначе False.
h = [F(a-2, b, s+'A')]
Создает список h с результатом рекурсивного вызова функции, где a уменьшается на 2, а к строке s добавляется 'A'.
if a % 2 == 0:
Проверяет, четное ли число a.
h += [F(a/2, b, s+'B')]
Если a четное, добавляет в список h результат рекурсивного вызова функции, где a делится на 2, а к строке s добавляется 'B'.
else:
Если a нечетное.
h += [F(a-7, b, s+'B')]
Добавляет в список h результат рекурсивного вызова функции, где a уменьшается на 7, а к строке s добавляется 'B'.
return sum(h)
Возвращает сумму элементов списка h (в данном случае True и False интерпретируются как 1 и 0).
print(F(40, 1, ''))
Вызов функции с начальными значениями a = 40, b = 1, s = '' и вывод результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7 5🔥3
Автор: Сергей Горбачев
Уровень: Средний
У исполнителя есть три команды, которые обозначены цифрами:
1. Прибавить 3
2. Прибавить 4
3. Умножить на 2
Сколько существует программ, для которых при исходном числе 11 результатом будет являться отрезок [50;54], при этом траектория вычислений не содержит числа 23?
def F(a, b: list):
if a >= min(b) or a == 23:
return a in b
return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)
print(F(11, [50, 51, 52, 53, 54]))
Ответ: 3254
def F(a, b: list):
• Объявление функции F с двумя параметрами: a (число) и b (список чисел).
if a >= min(b) or a == 23:
• Условие: если a больше или равен минимальному элементу списка b ИЛИ a равен 23.
return a in b
• Если условие выше выполняется, возвращается True/False (проверка, есть ли a в списке b).
return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)
• Если условие не выполняется, функция вызывает саму себя рекурсивно с тремя разными значениями a:
• Результаты этих вызовов суммируются.
print(F(11, [50, 51, 52, 53, 54]))
Вызов функции с аргументами a = 11 и b = [50, 51, 52, 53, 54], затем вывод результата.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4❤4🔥4