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

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

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

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

Задача 1#59468

Марина составляет 5-буквенные слова, она может использовать все буквы из слова «ЗАПРЕТ». При этом каждая буква может встречаться любое количество раз либо не встречаться вовсе. Буква А может стоять только после согласной буквы (причём две буквы А стоять рядом не могут). Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько слов может составить Марина?

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

Сначала найдем слова в которых буквы А нет совсем: 55 = 3125  .

Теперь найдем все слова, в которых буква А встречается 1 раз, так как буква А может стоять только после согласной, то рассматривать будем сразу парой (* обозначает любую букву кроме А):

C ⋅А ⋅∗⋅∗⋅∗

Эта пара может распологаться в слове в 4 местах: с 1 позиции, со 2, с 3 и с 4. Следовательно таких слов       3
4 ⋅1⋅5 ⋅4 = 2000  .

Теперь найдем все слова в которых буква А встречается дважды, так как буква А может стоять только после согласной, то рассматривать будем сразу парами (* обозначает любую букву кроме А):

C ⋅А ⋅C ⋅А ⋅∗

В таком случае существует всего 3 различных варианта перестановок пар (первый вариант указан выше):

C ⋅А ⋅∗⋅C ⋅А

∗⋅C ⋅А ⋅C ⋅А

Следовательно таких слов 4⋅1 ⋅4⋅1⋅5 ⋅3 = 240  .

Большее число раз буква А встречаться не может. Тогда найдем сумму всех значений: 3125+ 2000+ 240 = 5365  .

Решение через циклы
Составляем программу для перебора всех возможных 5-буквенных слов из букв слова ЗАПРЕТ. Первая буква не может быть А, потому что А должна идти только после согласной. Далее перебираем все варианты и проверяем условия: запрещаем АА, чтобы буквы А не стояли подряд, и запрещаем ЕА, так как А не может идти после гласной. Если условия выполнены, увеличиваем ответ. В итоге получаем количество допустимых слов.

a = "ЗАПРЕТ"  # допустимые буквы
a1 = "ЗПРЕТ"  # первой буквой не может быть А
n = 0

# перебираем все 5-буквенные слова
for x in a1:  # задаём первую букву, это не А
    for y in a:  # задаём остальные буквы
        for z in a:
            for w in a:
                for k in a:
                    s = x + y + z + w + k  # составляем слово

                    # запрещаем "АА" и "ЕА"
                    if not ("АА" in s) and not ("ЕА" in s):
                        n += 1

print(n)  # выводим ответ

Решение через itertools
С помощью product из модуля itertools перебираем все возможные 5-буквенные комбинации из букв слова ЗАПРЕТ. Так как буква может встречаться несколько раз или не встречаться вовсе, product подходит идеально. Данная функция перебирает все варианты с повторениями. Для каждой строки проверяем условия: первая буква не может быть А, последовательности АА и ЕА не должны встречаться. Если условия выполнены, увеличиваем ответ. В итоге получаем количество допустимых слов.

from itertools import product

s = "ЗАПРЕТ"
n = 0

# строим все 5-буквенные комбинации
for x in product(s, repeat=5):
    word = "".join(x)  # превращаем кортеж в строку

    # проверяем, что первая буква не "А", нет "АА" и нет "ЕА"
    if word[0] != "А" and not ("АА" in word) and not ("ЕА" in word):
        n += 1  # увеличиваем ответ

print(n)  # выводим ответ

Ответ: 5365

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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