Наша подборка Stepik задач №14 для подготовки
1. Домашка, задачи базового уровня (ФИПИ)
2. Практика, задачи повышенной сложности
Уровень: Базовый
Автор задачи: (М. Попков)
Уровень: Средний
Автор задачи: (А. Игнатюк)
Уровень: Сложный
Уровень: Средний
Автор: Статград
Уровень: Средний
Автор: Е.Джобс
Уровень: Базовый
Автор: Л. Шастин
Уровень: Базовый
Автор: Демоверсия 2025
Уровень: Базовый
Автор: Демоверсия 2025
Уровень: Базовый
Информатика ЕГЭ | itpy
Кстати у нас есть чатик
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤6❤🔥5🔥2🤔1
  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
  Автор: Статград
Уровень: Сложный
Назовём четвёркой четыре идущих подряд элемента
последовательности. Определите количество четвёрок, для которых
выполняются следующие условия:
– в четвёрке есть хотя бы два пятизначных числа и хотя бы одно не пятизначное;
– в четвёрке больше чисел, кратных 3, чем чисел, кратных 7;
– сумма элементов четвёрки больше максимального элемента
последовательности, запись которого заканчивается на 538, но меньше
удвоенного значения этого элемента.
numbers = [int(x) for x in open('17.txt')]
filtered = [x for x in numbers if str(x)[-3:] == '538']
result = []
for i in range(len(numbers) - 3):
    # x, y, z, w = numbers[i:i + 4]
    length = [len(str(abs(a))) for a in numbers[i:i + 4]]
    if 2 <= length.count(5) < 4:
        multiples_of_3 = [a for a in numbers[i:i + 4] if a % 3 == 0]
        multiples_of_7 = [a for a in numbers[i:i + 4] if a % 7 == 0]
        if len(multiples_of_3) > len(multiples_of_7):
            if max(filtered) < sum(numbers[i:i + 4]) < max(filtered) * 2:
                result.append(sum(numbers[i:i + 4]))
print(len(result), max(result))
# Ответ: 260 106865numbers = [int(x) for x in open('17.txt')]Чтение чисел из файла "17.txt" и преобразование их в целочисленный формат, помещение результатов в список numbers.
filtered = [x for x in numbers if str(x)[-3:] == '538']Создание нового списка под названием filtered, который содержит только элементы из numbers, у которых последние три цифры равны '538'.
result = []Инициализация пустого списка с именем result, в который будут помещаться результаты для последующего анализа.
for i in range(len(numbers) - 3):Запуск цикла for, который перебирает индексы элементов numbers за исключением последних трех элементов.
# x, y, z, w = numbers[i:i + 4]Комментарий указывает на предполагаемое использование переменных x, y, z, w для значений из подсписка numbers[i:i + 4], но непосредственно переменные не используются в данном участке кода.
length = [len(str(abs(a))) for a in numbers[i:i + 4]]Создание списка length, содержащего длины строковых представлений абсолютных значений элементов из подсписка numbers[i:i + 4].
if 2 <= length.count(5) < 4:Проверка условия: количество цифр "5" в длинах строковых представлений элементов равно или больше 2 и меньше 4.
multiples_of_3 = [a for a in numbers[i:i + 4] if a % 3 == 0]Формирование списка multiples_of_3, содержащего элементы из подсписка numbers[i:i + 4], которые делятся на 3 без остатка.
multiples_of_7 = [a for a in numbers[i:i + 4] if a % 7 == 0]Формирование списка multiples_of_7, содержащего элементы из подсписка numbers[i:i + 4], которые делятся на 7 без остатка.
if len(multiples_of_3) > len(multiples_of_7):Проверка условия: количество элементов, делящихся на 3 без остатка, больше количества элементов, делящихся на 7 без остатка.
if max(filtered) < sum(numbers[i:i + 4]) < max(filtered) * 2:Проверка условия: сумма элементов подсписка numbers[i:i + 4] находится в интервале между максимальным элементом списка filtered и удвоенным значением максимального элемента из filtered.
result.append(sum(numbers[i:i + 4]))Добавление суммы элементов подсписка numbers[i:i + 4] в список result.
print(len(result), max(result))Вывод количества элементов в списке result и максимального значения в этом списке.
Тут отвечают на вопросы
Please open Telegram to view this post
    VIEW IN TELEGRAM
  2🔥7 4❤🔥3
  Автор: Статград
Уровень: Базовый
Все десятибуквенные коды, составленные из букв, входящих в слово
СКАНЕР, расположены в алфавитном порядке и пронумерованы.
Определите количество кодов, для которых одновременно выполнены условия:
1) номер кода в списке делится на 3;
2) первая буква кода – согласная;
3) код содержит ровно одну букву Р.
Кликни, чтобы развернуть полностью
from itertools import product
num = 0
cnt = 0
for s in product(sorted('СКАНЕР'), repeat=10):
word = ''.join(s)
num += 1
if num % 3 == 0:
if word[0] in 'СКНР':
if word.count('Р') == 1:
cnt += 1
print(cnt)
Ответ: 4531250
from itertools import productИмпорт функции product из модуля itertools, которая создает все возможные комбинации длиной n из указанных элементов.
num = 0Инициализация переменной num для отслеживания общего количества рассмотренных комбинаций.
cnt = 0Инициализация переменной cnt для подсчета количества комбинаций, удовлетворяющих условиям задачи.
for s in product(sorted('СКАНЕР'), repeat=10):Цикл for, в котором перебираются все возможные комбинации длиной 10 символов из отсортированных букв 'СКАНЕР'.
word = ''.join(s)Объединение символов из текущей комбинации в одно слово для дальнейшей проверки.
num += 1Увеличение счетчика num на 1 для отслеживания количества рассмотренных комбинаций.
if num % 3 == 0:Проверка, что номер рассматриваемой комбинации делится на 3 без остатка.
if word[0] in 'СКНР':Проверка, содержит ли первая буква слова 'С', 'К', 'Н' или 'Р'.
if word.count('Р') == 1:Проверка, что буква 'Р' встречается в слове ровно 1 раз.
cnt += 1Увеличение счетчика cnt на 1, если текущая комбинация удовлетворяет всем условиям.
print(cnt)Вывод количества комбинаций, удовлетворяющих заданным условиям.
Please open Telegram to view this post
    VIEW IN TELEGRAM
  ❤🔥8🔥5 5❤1