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

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

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

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

Задача 1#72473

Игорь составляет 5-буквенные слова, в которых есть только буквы Д, О, С, К, А, причём буква А используется в каждом слове хотя бы 2 раза. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Игорь?

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

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

Всего 5-буквенных слов из заданного набора букв: 55 = 3125  - 5 букв на выбор для каждого из 5 мест.

Слов, в которых А встречается 0 раз:  5
4 = 1024  - 4 буквы на выбор для каждого из 5 мест.

Cлов, в которых А встречается 1 раз: 5∗44 = 1280  - 5 вариантов для размещения буквы А, 4 буквы на выбор для каждого из оставшихся 4 мест.

Тогда подходящих слов: 3125− 1024 − 1280 = 821  .

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

Для решения задачи через циклы будем поэтапно формировать все 5-буквенные слова из букв Д, О, С, К, А и проверять, что буква А встречается в слове хотя бы дважды. Алгоритм реализуется так:

Сначала создаём строку a = ’ДОСКА’, которая содержит все возможные буквы. Создаём переменную-счётчик c = 0 для подсчёта допустимых слов.

Далее используем 5 вложенных циклов for, по одному на каждую букву слова:

1. for x1 in a — выбираем букву на первой позиции.

2. for x2 in a — выбираем букву на второй позиции.

3. for x3 in a — выбираем букву на третьей позиции.

4. for x4 in a — выбираем букву на четвёртой позиции.

5. for x5 in a — выбираем букву на пятой позиции.

Внутри циклов формируем слово s = x1+x2+x3+x4+x5. Затем проверяем, что буква А встречается хотя бы два раза: if s.count(’А’) >= 2. Если условие выполняется, увеличиваем счётчик c += 1.

После перебора всех комбинаций выводим значение c — это количество допустимых слов.

# Создаём строку с буквами, доступными для составления слова
a = ’ДОСКА’

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

# Перебираем первую букву слова
for x1 in a:
    # Перебираем вторую букву слова
    for x2 in a:
        # Перебираем третью букву слова
        for x3 in a:
            # Перебираем четвёртую букву слова
            for x4 in a:
                # Перебираем пятую букву слова
                for x5 in a:
                    # Формируем слово из выбранных букв
                    s = x1+x2+x3+x4+x5
                    # Проверяем условие: буква А встречается хотя бы дважды
                    if s.count(’А’) >= 2:
                        # Увеличиваем счётчик, если условие выполнено
                        c += 1

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

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

Для упрощения перебора всех комбинаций используем модуль itertools и функцию product, которая создаёт декартово произведение букв, формируя все возможные 5-буквенные слова.

1. Генерируем все комбинации букв ’Д’, ’О’, ’С’, ’К’, ’А’ длиной 5: for x in product(’ДОСКА’, repeat = 5).

2. Преобразуем кортеж x в строку s = ’’.join(x).

3. Проверяем, что буква А встречается хотя бы дважды: if s.count(’А’) >= 2.

4. Если условие выполняется, увеличиваем счётчик c.

После перебора всех комбинаций выводим c — количество слов, удовлетворяющих условию.

from itertools import product

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

# Перебор всех 5-буквенных комбинаций букв ’Д’, ’О’, ’С’, ’К’, ’А’
for x in product(’ДОСКА’, repeat = 5):
    # Преобразуем кортеж в строку слова
    s = ’’.join(x)
    # Проверяем, что буква А встречается хотя бы дважды
    if s.count(’А’) >= 2:
        # Увеличиваем счётчик, если условие выполнено
        c += 1

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

Ответ: 821

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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