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

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

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

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

Задача 1#59231

Дамир составляет 5-буквенные коды из букв О, Л, Ь, Г, А. Слова должны соответствовать следующим условиям: Каждую букву нужно использовать ровно 1 раз; Ь нельзя ставить первым и нельзя ставить после гласной. Сколько различных кодов может составить Дамир?

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

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

Всего вариантов составления слов из 5 букв, в которых каждая из букв встречается по 1 разу: 5! = 120  перестановок.

Вариантов составления таких слов, но начинающихся с Ь: 4! = 24  перестановок.

Рассмотрим варианты составления таких слов, но с Ь после гласной буквы. Разместить пару гласная + Ь можно на одном из 4 мест, при этом вариантов гласных в паре - 2, а вариантов для оставшихся букв 3!  . Итого: 2 ∗4∗ 3! = 48  .

Тогда нужных по условию слов будет: 120− 24− 48 = 48  .

Решение через циклы
Составляем программу для перебора всех 5-буквенных комбинаций. Проверяем три условия: первая буква не «Ь» (используем индексацию), все буквы уникальны (используем set, количество уникальных букв должно быть 5) и «Ь» не стоит после гласной (используем конструкцию not in, чтобы избежать комбинаций АЬ и ОЬ). Если все условия выполнены, добавляем слово в множество, чтобы избежать повторов. В конце выводим длину множества.

a = "ОЛЬГА"  # допустимые буквы
count = set()  # множество для подходящих слов

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  # формируем слово
                    # проверяем три условия:
                    # 1) первая буква не Ь
                    # 2) каждую букву можно использовать 1 раз
                    # 3) Ь не стоит после гласной (А или О)
                    if s[0] != "Ь" and len(set(s)) == 5 and "ОЬ" not in s and "АЬ" not in s:
                        count.add(s)
print(len(count))  # выводим количество подходящих слов

Решение через itertools
Используем permutations для перебора всех перестановок букв, что гарантирует использование каждой буквы ровно 1 раз. Для каждой строки проверяем, что первая буква не «Ь» и что «Ь» не стоит после гласной, аналогично решению с циклами. Если условия соблюдены, добавляем слово в список. В конце считаем количество слов.

from itertools import permutations

ans = []  # список подходящих слов
gl = "ОА"  # гласные буквы

for p in permutations("ОЛЬГА", 5):
    s = "".join(p)  # формируем строку

    # проверка условия: первая буква не Ь и Ь не после гласной
    if s[0] != "Ь" and "ОЬ" not in s and "АЬ" not in s:
        ans.append(s)

print(len(ans))  # количество подходящих слов

Ответ: 48

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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