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

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

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

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

Задача 1#84848

Максим составляет 5-буквенные слова перестановкой букв слова САПОГ. При этом в слове не могут стоять рядом две гласные и две согласные буквы. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько слов может составить Максим?

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

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

В нашем слове 3 согласных и 2 гласных буквы. Единственный вид слова, который удовлетворяет условию выглядит следующим образом: СГСГС , где С - согласная буква, а Г - гласная. На первое место можно поставить одну из 3 согласных букв, на второе место - одну из 2 гласных букв. На третье место можно расположить одну из 2 согласных букв. На 4 и 5 место остается по одной букве. В итоге, получаем ответ: 3 ∗2∗ 2∗ 1∗1 = 12

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

Для решения задачи через циклы мы будем поэтапно формировать все 5-буквенные слова перестановкой букв слова "САПОГ"с учётом ограничения: две гласные или две согласные буквы не могут стоять рядом. В коде сначала разделяем буквы на согласные (sogl = ’СПГ’) и гласные (gl = ’АО’). Создаём пустое множество count = set() для хранения уникальных слов.

Поскольку единственный порядок, который удовлетворяет условию "не стоят рядом две гласные и две согласные выглядит как СГСГС (С — согласная, Г — гласная), мы используем 5 вложенных циклов:

1. for x1 in sogl — первая буква согласная.

2. for x2 in gl — вторая буква гласная.

3. for x3 in sogl — третья буква согласная.

4. for x4 in gl — четвёртая буква гласная.

5. for x5 in sogl — пятая буква согласная.

Внутри циклов формируем строку s = x1+x2+x3+x4+x5. Затем проверяем, что все буквы различны: len(set(s)) == len(s). Если условие выполнено, добавляем слово в множество count. После завершения перебора выводим количество слов через print(len(count)).

# Согласные буквы слова
sogl = ’СПГ’
# Гласные буквы слова
gl = ’АО’
# Множество для хранения уникальных допустимых слов
count = set()

# Перебор по схеме СГСГС
for x1 in sogl:  # первая буква — согласная
    for x2 in gl:  # вторая буква — гласная
        for x3 in sogl:  # третья буква — согласная
            for x4 in gl:  # четвёртая буква — гласная
                for x5 in sogl:  # пятая буква — согласная
                    # Формируем слово
                    s = x1 + x2 + x3 + x4 + x5
                    # Проверяем, что все буквы разные
                    if len(set(s)) == len(s):
                        # Добавляем слово в множество
                        count.add(s)

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

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

Используем модуль itertools и функцию permutations для генерации всех перестановок букв слова "САПОГ". Каждое полученное слово преобразуем из кортежа в строку: s = ’’.join(x).

Проверка условий реализуется через проверку наличия запрещённых сочетаний двух гласных или двух согласных подряд. В коде это сделано с помощью множества условий if (’СП’ not in s) and .... Если слово удовлетворяет всем условиям, увеличиваем счётчик count. После перебора всех перестановок выводим количество допустимых слов.

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

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

# Перебор всех перестановок букв слова "САПОГ"
for x in permutations(’САПОГ’):
    # Преобразуем кортеж в строку
    s = ’’.join(x)
    # Проверяем, что нет двух гласных или двух согласных подряд
    if (’СП’ not in s) and (’ПС’ not in s) and (’СГ’ not in s) and (’ГС’ not in s) and (’ПГ’ not in s) and (’ГП’ not in s) and (’ОА’ not in s) and (’АО’ not in s):
        # Увеличиваем счётчик, если условия выполнены
        count += 1

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

Ответ: 12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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