Тема 8. Комбинаторика

8.02 Подсчет количества слов/чисел

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

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

Задача 201#85068Максимум баллов за задание: 1

В классе занимаются 14 человек. Учитель каждый день выборочно проверяет домашнее задание и всегда опрашивает четное количество учащихся, при этом ситуация, когда никто не опрошен, невозможна. Сколькими различными способами учитель может провести опрос?

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

Решение руками

Возможны варианты опроса 2, 4, 6, 8, 10, 12 и 14 человек. Найдем по формуле сочетаний количество способов для каждого варианта:

2 ученика: --14!--= 13-⋅14-= 91
12!⋅2!    2

4 ученика: --14!--
10!⋅4! = 1001

6 учеников:  14!
6!⋅8! = 3003

8 учеников:  14!
-----= 3003
8!⋅6!

10 учеников: -14!--= 1001
4!⋅10!

12 учеников: -14!--
12!⋅2! = 91

14 учеников:  14!
------= 1
14!⋅0!

Всего возможных вариантов: 2 ⋅(91 + 1001 + 3003)+ 1 = 8191

Идея решения через itertools:

Мы используем функцию combinations из модуля itertools, чтобы сгенерировать все уникальные комбинации учащихся длиной 2, 4, 6, 8, 10, 12 и 14. Функция combinations автоматически учитывает, что порядок не важен (пары АБ и БА считаются одинаковыми). Каждая комбинация преобразуется в строку и добавляется в множество count для исключения дубликатов. После перебора всех комбинаций подсчитываем количество способов опроса.

Решение через itertools:

# Импортируем функцию combinations из модуля itertools
from itertools import combinations

# Множество для хранения уникальных комбинаций
count = set()

# Перебор всех чётных размеров групп от 2 до 14 включительно
for i in range(2,15,2):
    # Генерация всех комбинаций длины i
    for x in combinations("ABCDEFGHIJKLMN", r = i):
        # Преобразуем кортеж в строку
        s = "".join(x)
        # Добавляем комбинацию в множество
        count.add(s)

# Выводим количество уникальных способов опроса
print(len(count))

Ответ: 8191

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

Задача 202#85069Максимум баллов за задание: 1

Иван составляет 9-разрядные двадцатипятиричные числа, в которых цифры, которые кратны трем и кратны восьми, чередуются. Сколько различных чисел может составить Иван?

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

Для составления чисел можно использовать цифры от 0 до 9 и числа от 10 до 24 включительно. Из них кратны трем: 0, 3, 6, 9, 12, 15, 18, 21, 24. Кратны восьми: 0, 8, 16, 24. Кратны и трем, и восьми: 0, 24

Количество 9-разрядных чисел, которые начинаются с цифры, кратной трем:

8⋅4⋅9 ⋅4⋅9⋅4 ⋅9⋅4⋅9 = 13436928

Количество 9-разрядных чисел, которые начинаются с цифры, кратной восьми:

3 ⋅9 ⋅4⋅9 ⋅4 ⋅9⋅4 ⋅9 ⋅4 = 5038848

Также нам необходимо из общего количества вычесть те числа, которые находятся и в первом случае, и во втором случае. Их число равно:

1⋅2 ⋅2⋅2⋅2 ⋅2⋅2⋅2 ⋅2 = 28 = 256

Получаем общее число слов:

13436928 + 5038848 − 256 = 18475520

Идея решения через циклы:

Мы формируем все 9-разрядные числа в двадцатипятиричной системе, в которых цифры, кратные трём и кратные восьми, чередуются. Для этого задаём два множества символов: alf_3 для цифр, кратных трём, и alf_8 для цифр, кратных восьми. Используем 9 вложенных циклов for, чтобы перебрать все варианты цифр на соответствующих позициях. Так как чередование может начинаться с цифры, кратной трём, или с цифры, кратной восьми, мы дважды меняем местами алфавиты, чтобы сгенерировать все варианты. Каждое сформированное число, которое не начинается с нуля, добавляем в множество ans для исключения повторов.

Решение через циклы:

# Множество для хранения уникальных чисел
ans = set()

# Символы, кратные 3
alf_3 = "0369CFILO"

# Символы, кратные 8
alf_8 = "08GO"

# Два варианта чередования: начиная с кратного 3 или кратного 8
for i in range(2):
    # Перебор 1-й цифры (кратной 3 или 8)
    for x1 in alf_3:
        # Перебор 2-й цифры (кратной 8 или 3)
        for x2 in alf_8:
            for x3 in alf_3:
                for x4 in alf_8:
                    for x5 in alf_3:
                        for x6 in alf_8:
                            for x7 in alf_3:
                                for x8 in alf_8:
                                    for x9 in alf_3:
                                        # Собираем 9-разрядное число
                                        w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
                                        # Проверяем, что число не начинается с нуля
                                        if x1 != "0":
                                            ans.add(w)
    # Меняем местами алфавиты для второго варианта чередования
    alf_3, alf_8 = alf_8, alf_3

# Выводим количество уникальных чисел
print(len(ans))

Идея решения через itertools:

Для решения с помощью модуля itertools используем функцию product, которая генерирует все комбинации заданной длины с повторениями из выбранного множества символов. Сначала генерируем все комбинации, где первая цифра кратна трём (всего 5 цифр) и оставшиеся цифры кратны восьми (4 цифры), чередуя их при сборке числа. Затем повторяем процедуру, начиная с цифры, кратной восьми. Каждое число, которое не начинается с нуля, добавляем в множество ans для исключения повторов.

Решение через itertools:

from itertools import product # Импортируем функцию product

# Символы, кратные 3
alf_3 = "0369CFILO"

# Символы, кратные 8
alf_8 = "08GO"

# Множество для хранения уникальных чисел
ans = set()

# Перебор комбинаций с первой цифрой кратной 3
for a in product(alf_3, repeat=5):
    for b in product(alf_8, repeat=4):
        # Формируем число, чередуя цифры
        s = a[0] + b[0] + a[1] + b[1] + a[2] + b[2] + a[3] + b[3] + a[4]
        # Проверяем, что число не начинается с нуля
        if s[0] != "0":
            ans.add(s)

# Перебор комбинаций с первой цифрой кратной 8
for a in product(alf_8, repeat=5):
    for b in product(alf_3, repeat=4):
        # Формируем число, чередуя цифры
        s = a[0] + b[0] + a[1] + b[1] + a[2] + b[2] + a[3] + b[3] + a[4]
        # Проверяем, что число не начинается с нуля
        if s[0] != "0":
            ans.add(s)

# Выводим количество уникальных чисел
print(len(ans))

Ответ: 18475520

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

Задача 203#85462Максимум баллов за задание: 1

Студент составляет для отчёта названия источников. Названия должны иметь длину от 5 до 10 символов и состоять только из первых пятнадцати символов русского алфавита в верхнем регистре. Каждое название должно начинаться и заканчиваться гласной буквой, а в между ними содержать неповторяющиеся согласные буквы. Сколько названий студент вписал в отчёт, если он из всех составленных выбрал только те, в которых получилось сочетание символов БВГ.

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

Решение руками

В первых 15-ти букв русского алфавита 4 гласных(АЕЁИ) и 11 согласных(БВГДЖЕЙКЛМН) букв. Посчитаем сколько слов можно составить в 5-ти буквенном варианте:

4 ∗1∗ 1∗ 1∗4 = 16

Поскольку БВГ в слове обязательно должно быть, то 3 символа согласных в 5-символьном слове полностью заняла комбинация букв БВГ. Для 6-ти символьного слова кол-во слов будет выглядеть следующим образом:

4 ∗1∗ 1∗ 1∗8 ∗4∗ 2 = 256

Умножаем на 2 так как у нас есть две вариации 6-ти символьных слов, где есть БВГ: *БВГ** и **БВГ*. По мере увеличения символов в слове также будет увеличиваться кол-во вариантов слов, где есть БВГ, Для 7-ми символьного слова 3 варианта, для 8-ми символьного слова 4 варианта и так далее.

Опишем оставшиеся случаи и посчитаем сколько слов можем составить:

7-ми символьное слово: 4 ∗1∗ 1∗ 1∗8 ∗7∗ 4∗ 3 = 2688

8-ми символьное слово: 4 ∗1∗ 1∗ 1∗8 ∗7∗ 6∗ 4∗4 = 21504

9-ти символьное слово: 4∗ 1∗1 ∗1 ∗8∗ 7∗6 ∗5 ∗4∗ 5 = 134400

10-ти символьное слово: 4∗ 1∗1 ∗1 ∗8∗ 7∗6 ∗5 ∗4∗ 4∗6 = 645120

Осталось сложить полученные числа: 16+ 256+ 2688 +21504 + 134400 + 645120 = 803984

Идея решения через itertools:

Мы формируем все возможные названия источников длиной от 5 до 10 символов, используя только первые 15 букв русского алфавита в верхнем регистре. Названия должны начинаться и заканчиваться гласной буквой, а между ними содержать неповторяющиеся согласные. Для этого выделяем множества гласных gl и согласных sogl. Далее используем функцию permutations для генерации всех перестановок согласных длины от 3 до 8, чтобы учесть все возможные длины названий. После генерации каждой перестановки проверяем, содержит ли она последовательность БВГ. Если проверка проходит, перебираем все варианты первой и последней буквы (гласные) и увеличиваем счётчик cnt на 1 для каждого допустимого названия.

Решение через itertools:

from itertools import permutations # Импортируем функцию permutations для генерации перестановок

# Множество гласных букв
gl = "АЕЁИ"

# Множество согласных букв
sogl = "БВГДЖЗЙКЛМН"

# Счётчик для подсчёта допустимых названий
cnt = 0

# Перебираем длины названий от 5 до 10 символов
# Так как первая и последняя буквы гласные, внутренние согласные имеют длину от 3 до 8
for i in range(3, 8 + 1):
    # Генерация всех перестановок согласных длины i
    for x2 in permutations(sogl, i):
        x2 = "".join(x2) # Преобразуем кортеж символов в строку
        # Проверяем, содержит ли перестановка согласных последовательность "БВГ"
        if "БВГ" in x2:
            # Перебираем все варианты первой гласной буквы
            for x1 in gl:
                # Перебираем все варианты последней гласной буквы
                for x3 in gl:
                    # Для каждого допустимого сочетания увеличиваем счётчик
                    cnt += 1

# Выводим количество допустимых названий
print(cnt)

Ответ: 803984

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

Задача 204#85463Максимум баллов за задание: 1

Гоша составляет восьмизначные числа. Причём рядом не должны стоять цифры с одинаковым остатком от деления на 5, а также на последнем месте может быть только чётная цифра. Сколько чисел может составить Гоша?

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

Решение руками

На первое место можем поставить любую из цифр кроме 0, остаётся 9 цифр.

На каждое последующее место, кроме предпоследнего, можем поставить 8 цифр, так как рядом с каждым с любой цифрой не может стоять она сама и вторая цифра с таким же остатком (возможных остатков от деления на 5 всего 5 штук: 0, 1, 2, 3, 4; каждый из них имеют ровно две цифры, например остаток 0 имеют 0 и 5, остаток 1 - 1 и 6 и так далее). На последнем месте может быть любая четная цифра, но также нужно исключить одну цифру с таким же остатком, поэтому их останется 4.

Итоговая формула: 9⋅8 ⋅8 ⋅8⋅8⋅8 ⋅8⋅4 = 9437184

Идея решения через циклы:

Мы составляем восьмизначные числа по следующим правилам: цифры не должны стоять рядом с цифрами, которые имеют одинаковый остаток от деления на 5, а последняя цифра должна быть чётной. Для этого мы выделяем три множества:

- a1 — возможные цифры для первой позиции (1–9), чтобы число не начиналось с нуля;

- a2 — возможные цифры для промежуточных позиций (0–9);

- a3 — возможные цифры для последней позиции (только чётные).

Далее организуем 8 вложенных циклов for, каждый из которых перебирает одну позицию числа. Для каждой последующей цифры проверяем, что её остаток от деления на 5 не совпадает с остатком предыдущей цифры. Если условие нарушается, используем команду continue, чтобы перейти к следующей цифре без увеличения счётчика. Когда мы достигаем последней позиции, проверяем также, что цифра чётная (a3). Если все условия соблюдены, увеличиваем счётчик cnt на 1.

Решение программой с помощью циклов

a1 = "123456789" # Возможные цифры для первой позиции (не ноль)
a2 = "0123456789" # Возможные цифры для промежуточных позиций
a3 = "02468" # Возможные цифры для последней позиции (только чётные)
cnt = 0 # Счётчик для количества допустимых чисел

# 1-я цифра числа
for x1 in a1:
    # 2-я цифра числа
    for x2 in a2:
        if int(x1) % 5 == int(x2) % 5: # Проверяем остаток от деления на 5
            continue # Если совпадает, пропускаем эту цифру
        # 3-я цифра числа
        for x3 in a2:
            if int(x2) % 5 == int(x3) % 5:
                continue
            # 4-я цифра числа
            for x4 in a2:
                if int(x3) % 5 == int(x4) % 5:
                    continue
                # 5-я цифра числа
                for x5 in a2:
                    if int(x4) % 5 == int(x5) % 5:
                        continue
                    # 6-я цифра числа
                    for x6 in a2:
                        if int(x5) % 5 == int(x6) % 5:
                            continue
                        # 7-я цифра числа
                        for x7 in a2:
                            if int(x6) % 5 == int(x7) % 5:
                                continue
                            # 8-я цифра числа (последняя, только чётная)
                            for x8 in a3:
                                if int(x7) % 5 != int(x8) % 5: # Проверяем остаток от деления на 5
                                    cnt += 1 # Увеличиваем счётчик допустимых чисел

# Выводим количество допустимых восьмизначных чисел
print(cnt)

Ответ: 9437184

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

Задача 205#85464Максимум баллов за задание: 1

Арез составляет шестибуквенные слова из букв слова НАКОВАЛЬНЯ. Каждая буква может встречаться в слове только один раз, на первом месте не может стоять буква Ь, а буква Л может стоять только в окружении гласных. Сколько слов может составить Арез?

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

Решение руками

Буква Л может стоять только на позициях 2, 3, 4, 5, так как ей нужны соседи-гласные.

1. Л на 2-й позиции: Структура слова: _ Л _ _ _ _.

Гласные: позиции 1 (слева от Л) и 3 (справа от Л). Количество способов выбрать гласные для позиций 1 и 3: 3 ∗2 = 6  .

Остаются позиции 4, 5, 6, которые нужно заполнить из оставшихся 5 букв (исключая уже использованные гласные). Общее количество перестановок для позиций 4, 5, 6: 5∗ 4∗3 = 60  .

2. Л на 3-й позиции: Структура: _ _ Л _ _ _.

Гласные: позиции 2 и 4. Количество способов выбрать гласные: 3∗2 = 6  .

Остаются позиции 1, 5, 6, которые заполняются из 5 букв. Всего перестановок для 1, 5, 6: 5∗ 4∗ 3 = 60  .

Запрещённые случаи (когда Ь на 1-й позиции): фиксируем Ь на 1-й, остальные 2 буквы выбираем из 4: 4 ∗3 = 12  .

Допустимые перестановки: 60 − 12 = 48  . Тогда итоговое количество слов для варианта: 6 ∗48 = 288  слов.

Аналогично этой позиции вычисляются и Л на 4-й позиции _ _ _ Л _ _ и Л на 5-й позиции _ _ _ _ Л _.

Итог для слов с Л: 360 + 288 + 288+ 288 = 1224  слов.

Слова без Л: выбираем 6 букв из Н, А, К, О, В, Ь, Я (7 букв), учитывая, что Ь не может быть на первом месте: 7!− 6∗ 6! = 4320  .

Общее количество допустимых слов: 1224+ 4320 = 5544  .

Идея решения через циклы:

Мы формируем все возможные шестибуквенные слова из букв слова "НАКОВАЛЬНЯ учитывая ограничения:

1. Каждая буква может встречаться только один раз.

2. На первом месте не может стоять буква "Ь".

3. Буква "Л"может встречать только в окружении гласных букв.

Для этого мы используем шесть вложенных циклов for, каждый перебирает буквы исходного слова. После формирования слова проверяем:

- что все буквы встречаются только один раз с помощью all(s.count(i) == 1 for i in s);

- если буква "Л"присутствует, проверяем наличие хотя бы одной комбинации "гласная-Л-гласная иначе слово недопустимо;

- если буквы "Л"нет, слово сразу добавляется в множество count, чтобы не было дубликатов.

Решение через циклы:

a = "НАКОВАЛЬНЯ" # Исходное слово

count = set() # Множество для хранения допустимых слов
gl = "АОЯ" # Гласные буквы слова
# Генерируем все комбинации, в которых буква "Л" окружена гласными
m = [x1 + "Л" + x2 for x1 in gl for x2 in gl]

# Перебор всех позиций слова через вложенные циклы
for x1 in "НАКОВАЛНЯ": # 1-я буква
    for x2 in a: # 2-я буква
        for x3 in a: # 3-я буква
            for x4 in a: # 4-я буква
                for x5 in a: # 5-я буква
                    for x6 in a: # 6-я буква
                        s = x1 + x2 + x3 + x4 + x5 + x6 # Собираем слово
                        # Проверка уникальности всех букв
                        if all(s.count(i) == 1 for i in s):
                            if "Л" in s:
                                # Проверка наличия хотя бы одной допустимой комбинации Л
                                if any(i in s for i in m):
                                    count.add(s) # Добавляем слово в множество
                            else:
                                count.add(s) # Добавляем слово без Л
print(len(count)) # Вывод количества допустимых слов

Идея решения через itertools:

Для более компактного решения используем модуль itertools и функцию permutations, которая генерирует все перестановки длины 6 из множества букв. Каждое слово проверяем:

- первая буква не может быть "Ь"или "Л последняя буква не может быть "Л";

- каждая буква "Л"внутри слова должна быть окружена гласными;

- если слово проходит проверки, увеличиваем счётчик cnt.

Решение через itertools:

from itertools import permutations # Импортируем функцию permutations

s = set("НАКОВАЛЬНЯ") # Множество букв исходного слова
gl = "АОЯ" # Множество гласных букв

cnt = 0 # Счётчик допустимых слов

# Перебор всех перестановок длины 6
for i in permutations(s, 6):
    i = "".join(i) # Преобразуем кортеж в строку
    # Проверка первой и последней буквы на недопустимые значения
    if i[0] == "Ь" or i[0] == "Л" or i[-1] == "Л":
        continue
    flag = True # Флаг для проверки правил буквы "Л" внутри слова
    # Проверка каждой буквы "Л", кроме крайних позиций
    for j in range(1, len(i) - 1):
        if i[j] == "Л":
            if not (i[j - 1] in gl and i[j + 1] in gl):
                flag = False # Нарушение правил для "Л"
                break
    if flag:
        cnt += 1 # Увеличиваем счётчик допустимых слов
print(cnt) # Вывод количества допустимых слов

Ответ: 5544

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

Задача 206#85465Максимум баллов за задание: 1

Методист составляет для задачи пятизначные числа в четырнадцатиричной системе счисления. Сколько чисел из тех, что он составит, будут делиться на 38?

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

Решение руками

Найдем диапазон пятизначных чисел в 14-ричной системе:

Минимальное число = 10000  = 38416
     14       10  .

Максимальное число = DDDDD14   = 53782310  .

Найдём первое и последнее число в диапазоне, делящееся на 38:

Первое число ≥ 38416  , делящееся на 38: 38416 : 38 ≈ 1010.947 → 1011 ⋅38 = 38418  .

Последнее число ≤ 537823  , делящееся на 38: 537823: 38 ≈ 14153.236 → 14153⋅38 = 537814  .

Числа, делящиеся на 38, образуют арифметическую прогрессию: a1 = 38418,an = 537814,d = 38

Количество членов: n = an−a1+ 1 = 537814−38418-+ 1 = 13142+ 1 = 13143
      d            38  .

Идея решения через циклы:

Мы формируем все пятизначные числа в четырнадцатиричной системе счисления, используя цифры "0"–"D". Числа не могут начинаться с нуля. После генерации каждого числа проверяем его делимость на 38 и переводим в 10сс с помощью встроенной функции int(num, 14). Если число делится на 38, оно добавляется в множество count, чтобы исключить повторения. После перебора всех комбинаций выводим количество чисел в множестве.

Решение через циклы:

a = "0123456789ABCD" # Алфавит для 14-ричной системы

count = set() # Множество для хранения допустимых чисел

# Перебор всех пятизначных чисел с ограничением на первую цифру
for x1 in "123456789ABCD": # Первая цифра не может быть "0"
    for x2 in a: # Вторая цифра
        for x3 in a: # Третья цифра
            for x4 in a: # Четвёртая цифра
                for x5 in a: # Пятая цифра
                    s = x1 + x2 + x3 + x4 + x5 # Собираем число
                    # Проверка делимости на 38
                    if int(s, 14) % 38 == 0:
                        count.add(s) # Добавляем число в множество
print(len(count)) # Выводим количество допустимых чисел

Идея решения через itertools:

Для более компактного решения используем функцию product из модуля itertools. Она генерирует все возможные комбинации длины 5 из множества символов "0"–"D". После формирования числа проверяем, что первая цифра не равна 0, и проверяем делимость на 38. Если число удовлетворяет условиям, увеличиваем счётчик cnt. В конце выводим значение счётчика.

Решение через itertools:

from itertools import product # Импортируем функцию product

s = "0123456789ABCD" # Алфавит для 14-ричной системы
cnt = 0 # Счётчик допустимых чисел

# Генерация всех комбинаций длины 5
for k in product(s, repeat=5):
    num = "".join(k) # Преобразуем кортеж в строку
    # Проверка, что первая цифра не равна "0" и число делится на 38
    if num[0] != "0" and int(num, 14) % 38 == 0:
        cnt += 1 # Увеличиваем счётчик
print(cnt) # Выводим количество допустимых чисел

Ответ: 13143

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

Задача 207#85466Максимум баллов за задание: 1

Суперкомпьютер для разминки генерирует тройки слов. Первое слово имеет длину 5 и состоит из букв слова ПИРОГ, в нём каждая буква может встречаться любое количество раз, при этом буква Р может стоять только после буквы О. Второе слово имеет длину 4 и состоит из цифр шестеричной системы счисления. Третье слово имеет также длину 4 и состоит из цифр пятеричной системы счисления. Причём количество чётных цифр во втором и третьем словах должно быть одинаковым и они не могут начинаться с 0.

Необходимо найти общее число троек, которое может составить Суперкомпьютер.

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

Идея решения через циклы:

Мы разбиваем задачу на три части: первое слово из букв "ПИРОГ второе слово из цифр шестиричной системы и третье слово из цифр пятеричной системы.

1. Для первого слова длиной 5 букв из "ПИРОГ"проверяем условие: буква "Р"может стоять только после буквы "О". Мы формируем все комбинации с повторениями и считаем количество подходящих слов, удовлетворяющих этому условию.

2. Для второго и третьего слов проверяем два условия одновременно:

     - числа не могут начинаться с 0,

     - количество чётных цифр во втором и третьем словах должно совпадать.

После подсчёта допустимых слов для каждой части мы перемножаем результаты, чтобы получить общее число троек.

Решение через циклы:

a = "ПИРОГ" # Символы первого слова
b = "012345" # Символы второго слова (шестеричная система)
c = "01234" # Символы третьего слова (пятеричная система)
count1 = 0 # Счётчик для первого слова
count23 = 0 # Счётчик для второй и третьей частей

# Генерация всех 5-буквенных слов первого слова
for x1 in a: # 1-я буква
    for x2 in a: # 2-я буква
        for x3 in a: # 3-я буква
            for x4 in a: # 4-я буква
                for x5 in a: # 5-я буква
                    s = x1 + x2 + x3 + x4 + x5 # Собираем слово
                    # Проверяем условие для буквы "Р": она идёт только после "О"
                    if s.count("Р") == s.count("ОР"):
                        count1 += 1 # Увеличиваем счётчик подходящих слов

# Генерация всех 4-значных чисел второго слова
for x1 in "12345": # первая цифра не равна "0"
    for x2 in b:
        for x3 in b:
            for x4 in b:
                s1 = x1 + x2 + x3 + x4 # Собираем число второго слова
                # Генерация всех 4-значных чисел третьего слова
                for x5 in "1234": # первая цифра не равна "0"
                    for x6 in c:
                        for x7 in c:
                            for x8 in c:
                                s2 = x5 + x6 + x7 + x8 # Собираем число третьего слова
                                # Считаем количество чётных цифр во втором числе
                                m1 = [i for i in s1 if int(i) % 2 == 0]
                                # Считаем количество чётных цифр в третьем числе
                                m2 = [i for i in s2 if int(i) % 2 == 0]
                                # Проверяем условие равенства количества чётных цифр
                                if len(m1) == len(m2):
                                    count23 += 1 # Увеличиваем счётчик
print(count1 * count23) # Перемножаем результаты для общего числа троек

Идея решения через itertools:

Для более компактного решения используем функцию product из модуля itertools.

1. Генерируем все 5-буквенные слова первого слова с повторениями, проверяем условие для "Р".

2. Генерируем все 4-значные комбинации второго слова и 4-значные комбинации третьего слова с учётом, что первая цифра не равна "0".

3. Для проверки количества чётных цифр используем замену всех чётных цифр на "0"и сравниваем их количество в двух словах.

После подсчёта допустимых слов для каждой части перемножаем результаты.

Решение через itertools:

from itertools import product # Импортируем функцию product

s1 = "ПИРОГ" # Символы первого слова
cnt1 = 0 # Счётчик для первого слова

# Генерация всех 5-буквенных слов первого слова
for i in product(s1, repeat=5):
    word = "".join(i) # Преобразуем кортеж в строку
    if word.count("Р") == word.count("ОР"): # Проверка условия для "Р"
        cnt1 += 1

s2 = "012345" # Символы второго слова (шестеричная система)
s3 = "01234" # Символы третьего слова (пятеричная система)
cnt23 = 0 # Счётчик для второго и третьего слов

# Генерация всех 4-значных чисел второго слова
for i in product(s2, repeat=4):
    i = "".join(i)
    if i[0] != "0": # Первая цифра не равна 0
        # Генерация всех 4-значных чисел третьего слова
        for j in product(s3, repeat=4):
            j = "".join(j)
            if j[0] != "0": # Первая цифра не равна 0
                # Замена всех чётных цифр на "0" для удобства подсчёта
                i_even = i.replace("2", "0").replace("4", "0")
                j_even = j.replace("2", "0").replace("4", "0")
                # Проверка равенства количества чётных цифр
                if i_even.count("0") == j_even.count("0"):
                    cnt23 += 1
print(cnt1 * cnt23) # Перемножаем результаты для общего числа троек

Ответ: 184257288

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

Задача 208#85467Максимум баллов за задание: 1

Виктор составляет слова длины 6 из букв русского алфавита в верхнем и нижнем регистрах. Все составляемые слова являются палиндромами, в которых все буквы могут встречаться любое количество раз, а символ Й может стоять только рядом с другим символом Й. Сколько слов может составить Виктор?

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

Так как нам нужны палиндромы длины 6, можем составлять только слова длины 3 и мысленно их отзеркаливать, так и будут получаться палиндромы.

Слова без Й могут быть любыми, слова с И подчиняются определенным правилам:

*** -> ****** - подходит: 64 ⋅64 ⋅64

**Й -> **ЙЙ** - подходит: 64⋅64⋅2

*Й* -> *Й**Й* - не подходит

Й** -> Й****Й - не подходит

*ЙЙ -> *ЙЙЙЙ* - подходит: 64 ⋅2⋅2

Й*Й -> Й*ЙЙ*Й - не подходит

ЙЙ* -> ЙЙ**ЙЙ - подходит: 2 ⋅2⋅64

ЙЙЙ -> ЙЙЙЙЙЙ - подходит: 2⋅2 ⋅2

Если сложим все эти выражения, получим ответ: 270856  .

Идея решения через itertools:

Мы разбиваем задачу на части с учётом свойства палиндрома и ограничения для буквы "Й".

1. Так как слово палиндром длиной 6, нам достаточно сформировать первые 3 буквы. Последние 3 буквы будут зеркальным отражением первых 3 букв. Это уменьшает количество перебираемых комбинаций и упрощает проверку условий.

2. Алфавит включает все буквы русского языка в верхнем и нижнем регистре. Мы объединяем верхний и нижний регистр в одну строку для генерации комбинаций.

3. Для каждой комбинации первых трёх букв проверяем условие для буквы "Й":

     - если в слове есть только одна Й, она должна находиться на последнем месте первой половины (чтобы после зеркалирования она была рядом с другой "Й"),

     - если две Й, они должны быть рядом (чтобы в палиндроме не нарушалось правило),

     - комбинации с неподходящим расположением "Й"отбрасываются.

4. Все подходящие комбинации добавляются в множество для учёта уникальных слов.

Решение через itertools:

from itertools import product # Импортируем функцию product для генерации комбинаций

# Алфавит в верхнем регистре
s = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
# Добавляем также алфавит в нижнем регистре
s = s + s.lower()
ans = set() # Множество для хранения уникальных палиндромов

# Палиндром длиной 6 - достаточно сгенерировать первые 3 буквы
for i in product(s, repeat=3):
    word_ = "".join(i) # Преобразуем кортеж в строку первых 3 букв
    word = word_.upper() # Работаем с верхним регистром для проверки "Й"
    # Пропускаем неподходящие слова с буквой "Й"
    # Условие: одна "Й" не на последнем месте или две "Й" не рядом
    if "Й" in word:
        if word.count("Й") == 1 and word[-1] != "Й" or word.count("Й") == 2 and word[1] != "Й":
            continue
    ans.add(word_) # Добавляем допустимую комбинацию в множество

print(len(ans)) # Выводим количество уникальных палиндромов

Ответ: 270856

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

Задача 209#85468Максимум баллов за задание: 1

Шизофреник составляет пятизначные числа так, чтобы они содержали в своей записи хотя бы один собственный делитель. (Например число 12345 имеет делитель 5, а также имеет 5 в своём составе, значит оно подходит). Сколько таких чисел может составить шизофреник?

Примечание: собственным делителем называется любой его делитель, отличный от самого числа.

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

Идея решения через itertools:

Мы хотим найти все пятизначные числа, которые содержат хотя бы один собственный делитель в записи числа. Для этого используем перебор всех возможных комбинаций цифр и проверку каждого числа на наличие подходящей цифры, совпадающей с собственным делителем.

1. Задаём алфавит цифр от "0"до "9". Это позволяет сгенерировать все пятизначные числа через функцию product.

2. Создаём функцию f(x), которая возвращает множество всех собственных делителей числа x, кроме 1 и самого числа. Для этого перебираем делители от 2 до квадратного корня числа включительно и добавляем как сам делитель, так и частное от деления.

3. Генерируем все 5-значные числа с помощью product(s, repeat=5):

     - Пропускаем числа, начинающиеся с "0 так как они не являются пятизначными.

     - Если в числе присутствует цифра "1 оно сразу подходит, потому что 1 делит любое число.

     - Иначе проверяем наличие в числе любой цифры, которая равна собственному делителю числа. Если такая цифра есть, число подходит и добавляется в множество для учёта уникальных чисел.

4. После перебора всех комбинаций выводим количество чисел в множестве, что даёт ответ задачи.

Решение через itertools:

from itertools import product # Импортируем функцию product для генерации комбинаций

# Функция для нахождения всех собственных делителей числа, кроме 1 и самого числа
def f(x):
    c = set() # Множество для хранения делителей
    for k in range(2, int(x ** 0.5) + 1): # Перебираем возможные делители до sqrt(x)
        if x % k == 0: # Если k делит число
            c.add(str(k)) # Добавляем делитель в множество как строку
            c.add(str(x // k)) # Добавляем частное от деления тоже как строку
    return c # Возвращаем множество делителей

s = "0123456789" # Цифры для генерации чисел
cnt = 0 # Счётчик подходящих чисел (не используется напрямую, используем множество)
t = set() # Множество для хранения уникальных чисел

# Генерация всех 5-значных чисел
for i in product(s, repeat=5):
    _i = "".join(i) # Преобразуем кортеж в строку числа
    if _i[0] == "0": # Пропускаем числа, начинающиеся с 0
        continue
    if "1" in _i: # Любое число с цифрой 1 подходит
        t.add(_i)
        continue
    for j in f(int(_i)): # Перебираем собственные делители числа
        if j in _i: # Если цифра делителя есть в числе
            t.add(_i) # Добавляем число в множество подходящих
            break
print(len(t)) # Выводим количество уникальных подходящих чисел

Ответ: 73655

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

Задача 210#85469Максимум баллов за задание: 1

Вениамин составляет семибуквенные слова из букв своего имени, следуя правилам: каждая буква может встречаться любое количество раз, в слове должна быть последовательность из трёх одинаковых символов, попарно разделенных любыми другими символами. (Например в слове ВЕВИВМН три буквы В разделены буквами Е и И). Сколько различных слов может составить Вениамин?

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

Идея решения через itertools:

Мы хотим найти все семибуквенные слова из букв имени "ВЕНИАМИН которые содержат последовательность из трёх одинаковых символов, разделённых любыми другими символами. Для этого используем генерацию всех возможных комбинаций букв и проверку каждого слова на наличие требуемой последовательности.

1. Задаём множество букв имени "ВЕНИАМИН". Это позволяет исключить повторяющиеся буквы и сгенерировать все комбинации только из уникальных букв.

2. Генерируем все семибуквенные слова с помощью функции product(s, repeat=7):

     - Каждый результат product возвращает кортеж из 7 букв.

     - Преобразуем кортеж в строку методом join для удобной проверки последовательностей.

3. Проверяем наличие требуемой последовательности трёх одинаковых букв:

     - Перебираем индексы k = 0, 1, 2, чтобы проверить все возможные позиции для трёх одинаковых букв, разделённых двумя другими символами.

     - Условие проверки:

     * буквы на позициях k, k+2 и k+4 должны быть одинаковыми;

     * буквы на позициях k+1 и k+3 не должны совпадать с выбранной буквой последовательности.

     - Если условие выполнено, добавляем слово в множество для учёта только уникальных слов.

4. После перебора всех комбинаций выводим количество элементов в множестве, что даёт ответ задачи.

Решение через itertools:

from itertools import product # Импортируем функцию product для генерации комбинаций

s = set("ВЕНИАМИН") # Множество уникальных букв имени
ot = set() # Множество для хранения уникальных слов, удовлетворяющих условию

# Генерация всех 7-буквенных слов
for i in product(s, repeat=7):
    word = "".join(i) # Преобразуем кортеж букв в строку слова
    # Проверяем все возможные позиции для трёх одинаковых букв, разделённых двумя другими символами
    for k in range(3):
        if word[k] == word[k + 2] == word[k + 4] and word[k + 1] != word[k] and word[k + 3] != word[k]:
            ot.add(word) # Добавляем слово в множество уникальных слов
print(len(ot)) # Выводим количество уникальных слов, удовлетворяющих условию

Ответ: 15120

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

Задача 211#85470Максимум баллов за задание: 1

Теоретик составляет восьмизначные числа и делит его на пары по две цифры. Сколько чисел он может составить, чтобы склеенные попарно цифры числа, образующие двузначные числа, образовывали при чтении слева направо возрастающую арифметическую прогрессию?

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

Решение руками

Любое такое число можно представить как: ABCDEF    GH  , где:

AB, CD, EF, GH  — двузначные числа,

CD  − AB = EF − CD  = GH  − EF = d  (шаг прогрессии).

То есть: CD = AB  + d,EF = AB  +2d,GH  = AB + 3d  .

Максимально возможный шаг: GH  = AB + 3d ≤ 99  . Минимальное AB  = 10

→ 10+ 3d ≤ 99 → 3d ≤ 89 → d ≤ 29.

Для каждого шага d (от 1 до 29) AB может быть от 10 до 99 - 3d (чтобы GH  ≤ 99  ). Количество возможных AB  = (99 − 3d)− 10+ 1 = 90 − 3d  .

Нужно сложить количество AB для всех d от 1 до 29: (90 − 3⋅1)+ (90− 3⋅2)+ ⋅⋅⋅+ (90− 3⋅29) = 87 + 84+ 81+ ⋅⋅⋅+ 3  .

Как посчитать эту сумму? Это арифметическая прогрессия: первый член = 87, последний член = 3, количество членов = 29. Сумма = (Первый + Последний) ⋅ Количество / 2 = (87 + 3)⋅29∕2 = 90⋅29∕2 = 1305.

Решение программой

cnt = 0
for a in range(10, 99 + 1):
    for b in range(a + 1, 99 + 1):
        for c in range(b + 1, 99 + 1):
            for d in range(c + 1, 99 + 1):
                if b - a == c - b == d - c:
                    cnt += 1
print(cnt)

Ответ: 1305

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

Задача 212#85471Максимум баллов за задание: 1

Мишель составляет слова путём перестановки букв своего имени и располагает их в алфавитном порядке. Под каким номером будет находиться слово ШМЕЛЬИ? (Нумерация начинается с 1).

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

Решение руками

1. Слова, начинающиеся на Е, И, Л, М: 4 ∗5! = 480  - в качестве первой буквы выбирается одна из четырех, оставшиеся можно расставить произвольно.

2. Слова, начинающиеся на Ш:

ШЕ****: 1∗4! = 24

ШИ****: 1∗4! = 24

ШЛ****: 1∗4! = 24

3. Слова, начинающиеся на ШМЕ:

ШМЕИ**: 1∗ 2! = 2

4. Слова, начинающиеся на ШМЕЛ:

ШМЕЛИ*: 1

Итого слов, стоящих до ШМЕЛЬИ, 480+ 24 +24 + 24+ 2+ 1 = 555  . Значит само слово ШМЕЛЬИ имеет номер 556 (нумерация с 1 учтена, так как счет количества слов мы начинаем с 1).

Решение программой с помощью циклов

Для решения задачи с помощью циклов мы будем перебирать все возможные 6-буквенные комбинации букв из имени "МИШЕЛЬ"в алфавитном порядке и считать только уникальные перестановки.

1. Сначала сортируем буквы имени в алфавитном порядке:

     - Это позволяет генерировать слова в алфавитном порядке при помощи вложенных циклов.

2. Организуем шесть вложенных циклов for, по одному для каждой буквы слова:

     - Каждый цикл перебирает все буквы в отсортированном списке.

     - Формируем слово s путём конкатенации букв из всех циклов.

3. Проверяем, что слово является перестановкой букв имени:

     - Используем условие len(set(s)) == len(s), чтобы убедиться, что буквы не повторяются и слово состоит из всех уникальных букв.

4. Считаем количество таких слов и проверяем, достигли ли мы нужного слова "ШМЕЛЬИ":

     - Если текущее слово совпадает с "ШМЕЛЬИ выводим значение счётчика count, который и будет номером слова.

a = sorted("МИШЕЛЬ") # Сортируем буквы имени в алфавитном порядке
count = 0 # Счётчик для нумерации перестановок

# Генерация всех 6-буквенных слов через вложенные циклы
for x1 in a: # 1-я буква
    for x2 in a: # 2-я буква
        for x3 in a: # 3-я буква
            for x4 in a: # 4-я буква
                for x5 in a: # 5-я буква
                    for x6 in a: # 6-я буква
                        s = x1 + x2 + x3 + x4 + x5 + x6 # Собираем слово
                        if len(set(s)) == len(s): # Проверяем, что буквы не повторяются
                            count += 1 # Увеличиваем счётчик уникальных слов
                            if s == "ШМЕЛЬИ": # Если текущее слово — нужное
                                print(count) # Выводим его номер

Решение программой с помощью модуля itertools

Для решения задачи с помощью itertools используем функцию permutations, которая генерирует все перестановки букв имени.

1. Составляем строку s из букв имени "МИШЕЛЬ".

2. Получаем все перестановки длины 6 и сортируем их в алфавитном порядке:

     - Используем sorted(permutations(s)), чтобы получить список перестановок в алфавитном порядке.

3. Сравниваем каждую перестановку с целевым словом "ШМЕЛЬИ":

     - Преобразуем кортеж в список для удобного сравнения с паттерном.

     - Если текущая перестановка совпадает с целевым словом, выводим номер позиции и прекращаем перебор.

from itertools import permutations # Импортируем функцию permutations

s = "МИШЕЛЬ" # Буквы имени
r = sorted(permutations(s)) # Получаем все перестановки и сортируем их

pattern = [x for x in "ШМЕЛЬИ"] # Целевое слово в виде списка
position = 1 # Начальный номер позиции

# Поиск позиции целевого слова
for x in r:
    if list(x) == pattern: # Если текущая перестановка совпадает с нужным словом
        print(position) # Выводим номер слова
        break # Прекращаем поиск
    position += 1 # Увеличиваем номер позиции для следующей перестановки

Ответ: 556

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

Задача 213#137602Максимум баллов за задание: 1

Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи цифру 1, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом? Любую цифру можно использовать любое количество раз.

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

Решение руками

В 8-й системе счисления всего 8 цифр: 7, 6, 5, 4, 3, 2, 1 и 0. По условию в числе не должно присутствовать цифры 1, поэтому алфавит сокращаетcя до 7, 6, 5, 4, 3, 2, 0. Всего получилось четыре чётных цифры и три нечётные.

Так как недопустимо ставить рядом две цифры одинаковой чётности, чётные и нечётные цифры должны чередоваться, таких вариантов всего два: Ч Н Ч Н Ч и Н Ч Н Ч Н.

Запишем эти же варианты, но с количеством цифр из алфавита, не забывая, что на первом месте в числе не может стоять ноль и что цифры должны быть различные. Получим:

3⋅4 ⋅2⋅3⋅1 + 3⋅3⋅3 ⋅2⋅2 = 72 + 108 = 180

Решение через циклы:

Сначала создаём пустое множество ans, куда будем добавлять все допустимые числа, чтобы исключить повторения. Обозначим строку a = "0234567" как набор доступных цифр, исключая 1, которые могут стоять на любой позиции. Для каждой позиции числа создаём вложенные циклы, перебирая все возможные варианты:

  • x1 — первая цифра, должна быть не нулём, поэтому цикл идёт по строке "234567".
  • x2, x3, x4, x5 — остальные цифры, перебираются по строке a, содержащей все разрешённые цифры.

Для каждой комбинации формируем строку s = x1 + x2 + x3 + x4 + x5. Далее проверяем два условия:

1. В числе нет подряд стоящих чётных или нечётных цифр. Для этого используем генератор all(int(s[i]) % 2 != int(s[i + 1]) % 2 for i in range(len(s) - 1)), который проверяет для каждой пары соседних цифр, что остатки от деления на 2 различны.

2. Все цифры числа различны, что проверяется условием len(s) == len(set(s)), где set(s) создаёт множество уникальных символов строки.

Если оба условия выполняются, добавляем число в множество ans. После перебора всех вариантов выводим длину множества len(ans), что и есть количество допустимых чисел.

# Создаём пустое множество для хранения допустимых чисел
ans = set()

# Строка с доступными цифрами
a = "0234567"

# Перебор первой цифры числа (не 0)
for x1 in "234567":
    # Перебор второй цифры числа
    for x2 in a:
        # Перебор третьей цифры числа
        for x3 in a:
            # Перебор четвёртой цифры числа
            for x4 in a:
                # Перебор пятой цифры числа
                for x5 in a:
                    # Формируем строку числа
                    s = x1 + x2 + x3 + x4 + x5
                    # Проверяем условия:
                    # 1. Нет подряд идущих чётных или нечётных цифр
                    # 2. Все цифры различны
                    if all(int(s[i]) % 2 != int(s[i + 1]) % 2 for i in range(len(s) - 1)) and len(s) == len(set(s)):
                        # Если условия выполнены, добавляем число в множество
                        ans.add(s)

# Вывод количества допустимых чисел
print(len(ans))

Решение через itertools:

Используем модуль itertools и функцию product, которая генерирует все возможные комбинации цифр длины 5 с повторениями. Перебираем все комбинации из строки a = "0234567" и формируем число из кортежа с помощью .join(i). Для каждой комбинации проверяем:

1. Первая цифра не ноль (s[0] != ’0’). 2. Нет соседних чётных или нечётных цифр, проверка такая же, как в циклах. 3. Все цифры различны.

Если условия выполнены, добавляем число в множество ans. После перебора выводим длину множества.

from itertools import product

# Создаём пустое множество для хранения допустимых чисел
ans = set()

# Строка с доступными цифрами
a = ’0234567’

# Генерация всех комбинаций длины 5 с повторениями
for i in product(a, repeat=5):
    # Преобразуем кортеж в строку
    s = ’’.join(i)
    # Проверяем условия:
    # 1. Первая цифра не 0
    # 2. Нет подряд идущих чётных или нечётных цифр
    # 3. Все цифры различны
    if (s[0] != ’0’) and all(int(s[i]) % 2 != int(s[i + 1]) % 2 for i in range(len(s) - 1)) and len(s) == len(set(s)):
        # Если условия выполнены, добавляем число в множество
        ans.add(s)

# Вывод количества допустимых чисел
print(len(ans))

Ответ: 180

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

Задача 214#137626Максимум баллов за задание: 1

Все четырёхбуквенные слова, в составе которых могут быть только буквы Л, Е, М, У, Р, записаны в алфавитном порядке и пронумерованы, начиная с 1. Ниже приведено начало списка.

1. ЕЕЕЕ

2. ЕЕЕЛ

3. ЕЕЕМ

4. ЕЕЕР

5. ЕЕЕУ

6. ЕЕЛЕ

Под каким номером в списке идёт первое слово, которое начинается с буквы Л?

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

Решение аналитически:

Присвоим буквам числовое значение в зависимости от алфавитного порядка. Буквы получат такие значения: Е = 0; Л = 1; М = 2; Р = 3; У = 4.

Первое слово, которое будет удовлетворять условию выглядит так: ЛООО. В числовом представлении это будет выглядеть таким образом: 1000.

Как можем заметить, наш алфавит записан в 5-ричной системе счисления. Данное значение нам нужно перевести в десятичную систему счисления. Значение будет равняться 125.

Нужно увеличить данное значение на единицу, поскольку отсчёт в задаче начинается с 1. Ответ: 126.

Решение программой с помощью циклов:

Для того чтобы определить номер первого слова, начинающегося с буквы Л, составим программу, которая перебирает все возможные четырёхбуквенные слова из букв Е, Л, М, Р, У. Для этого используем четыре вложенных цикла, каждый из которых отвечает за выбор буквы на соответствующей позиции слова. Счётчик c будет увеличиваться при формировании каждого нового слова, и таким образом мы будем знать его номер в алфавитном списке. Когда формируется слово, начинающееся с буквы Л, его номер записывается в список ans. После завершения работы программы выводится первый элемент этого списка, что соответствует номеру первого слова с буквой Л на первом месте.

a = ’ЕЛМРУ’ # алфавит, из которого составляются слова
c = 0 # счётчик, отслеживающий номер текущего слова
ans = [] # список для хранения номеров слов, начинающихся с Л

# Перебираем все возможные варианты букв на 1-й позиции
for i in a:
    # Перебираем буквы на 2-й позиции
    for j in a:
        # Перебираем буквы на 3-й позиции
        for k in a:
            # Перебираем буквы на 4-й позиции
            for l in a:
                s = i + j + k + l # формируем слово из выбранных букв
                c += 1 # увеличиваем счётчик номера слова
                # Если слово начинается с буквы Л
                if i == ’Л’:
                    ans.append(c) # сохраняем его номер
print(ans[0]) # выводим номер первого слова, начинающегося с Л

Решение программой с помощью модуля itertools:

Задачу можно упростить, используя модуль itertools и функцию product, которая сразу генерирует все возможные комбинации длины 4 из заданного алфавита с повторениями. Перебираем каждую комбинацию, увеличиваем счётчик и проверяем, начинается ли слово с буквы Л. Как только встречается первое слово, удовлетворяющее условию, выводим его номер и завершаем работу с помощью break.

from itertools import product # импорт функции для генерации слов

a = ’ЕЛМРУ’ # алфавит
c = 0 # счётчик для нумерации слов

# Генерируем все возможные слова длины 4
for i in product(a, repeat=4):
    s = ’’.join(i) # преобразуем кортеж букв в строку
    c += 1 # увеличиваем счётчик
    # Проверяем, начинается ли слово с буквы Л
    if s[0] == ’Л’:
        print(c) # выводим номер первого такого слова
        break # прерываем цикл, так как слово найдено

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