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

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

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

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

Задача 1#60305

Юля составляет 5-буквенные коды из букв Ф,Е,С,Т,И,В,А,Л,Ь. Буква И может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Е. Все остальные буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Юля?

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

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

Случай 1: Код не содержит букву И

Каждая из 5 позиций может быть заполнена любой из 8 букв.85 = 32768  кодов.

Случай 2: Код содержит ровно одну букву И

Буква И может стоять только на 2-й, 3-й или 4-й позиции (так как она не может быть на 1-й или 5-й).

И на 2-й позиции (_ И _ _ _):

1-я позиция: Не может быть Е (чтобы не было ЕИ). Доступно 7 букв (все, кроме И и Е).

3-я позиция: Не может быть Е (чтобы не было ИЕ). Доступно 7 букв.

4-я и 5-я позиции: Любые 8 букв (включая Е, но без И).

Количество кодов: 7∗ 1∗7 ∗8 ∗8 = 3136  кодов. Аналогичным образом считаемся И на 3-й позиции (_ _ И _ _), И на 4-й позиции (_ _ _ И _).

Итого для случая с одной буквой И: 3136(2-я позиция) + 3136(3-я позиция) + 3136(4-я позиция) = 9408 кодов.

Общее количество кодов: 32768(без И) + 9408(с одной И) = 42176 кодов.

Решение программой (циклы):
Составляем программу для перебора всех 5-буквенных кодов из букв ФЕСТИВАЛЬ, где буква И может встречаться не более одного раза, при этом она не может стоять на первой или последней позиции и не может быть рядом с буквой Е. Для каждого кода проверяем эти условия с помощью count и проверки подстрок ЕИ и ИЕ. Если код подходит, добавляем его в множество, чтобы исключить дубликаты, в конце выводим длину множества, что и будет количеством допустимых кодов.

ans = set()  # множество для хранения всех допустимых 5-буквенных кодов
alf = "ФЕСТИВАЛЬ"  # доступные буквы

# Перебираем все возможные комбинации из 5 букв через вложенные циклы
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    w = x1 + x2 + x3 + x4 + x5  # формируем код

                    # Проверяем условия:
                    # 1. Буква И встречается не более одного раза
                    # 2. Буква И не на первой и не на последней позиции
                    # 3. Буква И не рядом с буквой Е
                    if w.count("И") <= 1 and w[0] != "И" and w[-1] != "И" and "ЕИ" not in w and "ИЕ" not in w:
                        ans.add(w)  # добавляем код во множество, чтобы исключить дубликаты
print(len(ans))  # выводим количество допустимых кодов

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

from itertools import product

ans = set()  # множество для хранения всех допустимых 5-буквенных кодов
alf = "ФЕСТИВАЛЬ"  # доступные буквы

# Используем product для перебора всех возможных 5-буквенных комбинаций
for w in product(alf, repeat=5):
    w = "".join(w)  # преобразуем кортеж в строку

    # Проверяем условия:
    # 1. Буква И встречается не более одного раза
    # 2. Буква И не на первой и не на последней позиции
    # 3. Буква И не рядом с буквой Е
    if w.count("И") <= 1 and w[0] != "И" and w[-1] != "И" and "ЕИ" not in w and "ИЕ" not in w:
        ans.add(w)  # добавляем код во множество, чтобы исключить дубликаты
print(len(ans))  # выводим количество допустимых кодов

Ответ: 42176

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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