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

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

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

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

Задача 1#51470

Из букв слова Х,О,Г,В,А,Р,Т,С составляются 8-буквенные последовательности. Сколько можно составить различных последовательностей таких, что каждая буква в них используется ровно один раз и буква А не стоит рядом с буквой Т?

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

Всего 8-буквенных слов можно составить 8!  , так как уникальных букв для составления у нас 8.

Из них нужно вычесть количество сочетаний, в которых присутствуют буквы А и Т рядом. Комбинаций из этих букв всего 2: АТ и ТА, всего существует 7 варианта разместить две буквы рядом в слове из 8 букв, поэтому итоговая формула будет выглядеть так: 7⋅2 ⋅(1 ⋅1⋅6⋅5 ⋅4⋅3⋅2 ⋅1)

8!− (7⋅2⋅(1⋅1 ⋅6⋅5⋅4 ⋅3⋅2⋅1)) = 30240

Решение программой (циклы):
Составим программу для перебора всех 8-буквенных слов из букв Х,О,Г,В,А,Р,Т,С. Для этого организуем 8 вложенных циклов, по одному на каждую букву, каждый перебирает буквы из строки «ХОГВАРТС», формируя все комбинации. После формирования слова проверяем условия: все буквы должны быть различны (это делается через len(set(w)) == 8, так как множество хранит только уникальные символы, и если его длина совпадает с длиной слова, значит, повторов нет). Также проверяем, что буквы «А» и «Т» не стоят рядом, для этого достаточно убедиться, используя оператор in, что подстроки «АТ» и «ТА» отсутствуют в слове.
Если слово удовлетворяет всем условиям, добавляем его в множество. После завершения циклов выводим длину множества, получая количество допустимых слов.

ans = set()  # множество для хранения уникальных слов
alf = ’ХОГВАРТС’  # допустимые буквы

# 8 вложенных циклов для перебора всех комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        for x7 in alf:
                            for x8 in alf:
                                w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8  # формируем слово
                                if len(w) == len(set(w)):  # проверяем, что все буквы различны
                                    if ’АТ’ not in w and ’ТА’ not in w:  # проверяем, что А и Т не рядом
                                        ans.add(w)  # добавляем слово в множество
print(len(ans))  # выводим количество допустимых слов

Решение программой (itertools):
Для перебора всех возможных комбинаций используем функцию permutations из модуля itertools. Она формирует все перестановки указанной длины, что удобно в данной задаче, так как буквы не повторяются. После этого проверяем условие на рядом стоящие буквы «А» и «Т» точно так же, как в решении с циклами. Если слово подходит, добавляем его в множество.

from itertools import permutations

ans = set()  # множество для хранения уникальных слов
alf = ’ХОГВАРТС’  # допустимые буквы

# перебираем все перестановки длины 8
for w in permutations(alf, 8):
    w = ’’.join(w)  # преобразуем кортеж в строку
    if ’АТ’ not in w and ’ТА’ not in w:  # проверяем, что А и Т не рядом
        ans.add(w)  # добавляем слово в множество
print(len(ans))  # выводим количество допустимых слов

Ответ: 30240

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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