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

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

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

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

Задача 1#85060

Петя составляет 7-буквенные слова, содержащие в себе только заглавные буквы латинского алфавита, содержащиеся в восемнадцатиричной системе счисления. Сколько различных слов может составить Петя с учётом того, что все согласные буквы в слове различны и не могут стоять в начале, в середине и в конце слова?

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

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

Алфавит для составления слов включает в себя следующие буквы: A, B, C, D, E, F, G, H. Из них гласные – A, E; согласные – B, C, D, F, G, H.

На четыре доступных для согласных позиции можем расставить соответственно от нуля до четырех согласных. Причём если эти четыре позиции заняты не полностью гласными или не полностью согласными, нужно также домножать на количество возможных позиционных расстановок - сочетаний C из n по k:

Допустим, что в слове 0 согласных: 2⋅2 ⋅2⋅2⋅2 ⋅2⋅2 = 128  .

Допустим, что в слове 1 согласная. Ее можно поставить на 4 позиции четыремя способами: (2⋅6 ⋅2⋅2⋅2 ⋅2⋅2)⋅4 = 1536  .

Допустим, что в слове 2 согласные. Их можно поставить на 4 позиции -4!--= 6
2!⋅2!  способами: (2⋅6 ⋅5⋅2⋅2 ⋅2⋅2)⋅6 = 5760  .

Допустим, что в слове 3 согласные. Их можно поставить на 4 позиций -4!--
3!⋅1! = 4  способами: (2⋅6 ⋅5⋅2⋅4 ⋅2⋅2)⋅4 = 7680  .

Допустим, что в слове 4 согласные: (2⋅6⋅5 ⋅2⋅4⋅3 ⋅2) = 2880  .

Для конечного ответа сложим все получившиеся результаты.

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

Для решения задачи через циклы мы будем поэтапно формировать все 7-буквенные слова, состоящие из букв ’A’-’H’ (цифры восемнадцатиричной системы в виде букв). При этом необходимо, чтобы все согласные буквы (’B’,’C’,’D’,’F’,’G’,’H’) были различны и не стояли в первой, четвертой и последней позиции, которые занимают только гласные (’A’,’E’). Алгоритм реализуется следующим образом:

Сначала создаём строку a = ’ABCDEFGH’ с буквами, которые могут использоваться в словах. Выделяем отдельные строки для согласных sogl = ’BCDFGH’ и гласных gl = ’AE’. Создаём пустое множество count = set() для хранения всех уникальных слов, удовлетворяющих условиям.

Далее используем 7 вложенных циклов for для каждой позиции слова:

1. for x1 in gl — первая буква должна быть гласной (индекс 0).

2. for x2 in a, for x3 in a — 2-я и 3-я буквы могут быть любыми из ’A’-’H’.

3. for x4 in gl — 4-я буква (середина слова) должна быть гласной.

4. for x5 in a, for x6 in a — 5-я и 6-я буквы могут быть любыми.

5. for x7 in gl — последняя буква (индекс 6) должна быть гласной.

После формирования слова s = x1+x2+x3+x4+x5+x6+x7 создаём список m, в котором хранятся все согласные буквы слова: m = [i for i in s if i in sogl].

Проверяем условие, что все согласные буквы различны: len(m) == len(set(m)). Если условие выполняется, добавляем слово в множество count. После завершения перебора выводим количество элементов множества len(count) — это количество допустимых слов.

# Список всех букв
a = ’ABCDEFGH’

# Согласные буквы слова
sogl = ’BCDFGH’

# Гласные буквы слова
gl = ’AE’

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

# Перебор первой буквы (гласная)
for x1 in gl:
    # Перебор второй буквы (любая)
    for x2 in a:
        # Перебор третьей буквы (любая)
        for x3 in a:
            # Перебор четвертой буквы (гласная)
            for x4 in gl:
                # Перебор пятой буквы (любая)
                for x5 in a:
                    # Перебор шестой буквы (любая)
                    for x6 in a:
                        # Перебор седьмой буквы (гласная)
                        for x7 in gl:
                            # Формируем слово из выбранных букв
                            s = x1+x2+x3+x4+x5+x6+x7
                            # Список согласных букв в слове
                            m = [i for i in s if i in sogl]
                            # Проверка, что все согласные буквы различны
                            if len(m) == len(set(m)):
                                # Добавляем слово в множество
                                count.add(s)
# Выводим количество допустимых слов
print(len(count))

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

С помощью модуля itertools упрощаем перебор всех 7-буквенных комбинаций с функцией product. Генерируем все слова из букв ’A’-’H’.

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

2. Проверяем, что первая, четвертая и последняя буквы слова — гласные: s[0] in ’AE’ and s[3] in ’AE’ and s[-1] in ’AE’.

3. Создаём список согласных букв слова: m = [i for i in s if i in sogl].

4. Проверяем, что все согласные различны: len(m) == len(set(m)).

5. Если условие выполняется, добавляем слово в множество count.

В конце выводим len(count) — количество допустимых слов.

from itertools import product

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

# Согласные буквы
sogl = ’BCDFGH’

# Перебор всех 7-буквенных комбинаций
for x in product(’ABCDEFGH’, repeat = 7):
    # Преобразуем кортеж в строку слова
    s = ’’.join(x)
    # Проверяем, что первая, четвертая и последняя буквы - гласные
    if s[0] in ’AE’ and s[3] in ’AE’ and s[-1] in ’AE’:
        # Список согласных букв слова
        m = [i for i in s if i in sogl]
        # Проверка, что все согласные буквы различны
        if len(m) == len(set(m)):
            # Добавляем слово в множество
            count.add(s)
# Выводим количество допустимых слов
print(len(count))

Ответ: 17984

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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