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

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

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

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

Задача 1#59472

Школьник составляет 9-буквенные слова, в которых есть только буквы П, О, Б, Е, Д, А. При этом известно, что буква П встречается не более 6 раз. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые школьник может написать?

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

Всего вариантов без учета ограничений будет 69 = 10077696  . Из данного общего количества надо вычесть случаи, когда буква П встречается 7,8 и 9 раз. Рассмотрим данные случаи отдельно

Когда буква П встречается 7 раз – 52 ⋅((9⋅8)∕2) = 25 ⋅36 = 900  случаев.

Когда буква П встречается 8 раз – 5 ⋅9 = 45  случаев.

И когда П встречается 9 раз всего 1 случай.

Вычитаем наши случаи из общего количества – 10077696 − 900− 45− 1 = 10076750  .

Решение программой (циклы):
Составляем программу для перебора всех 9-буквенных слов из заданных букв, используя вложенные циклы. Переходим к условию – так как буква П может встречаться не более 6 раз, для каждого слова проверяем, сколько раз она встречается, используя метод count  . Если условие выполнено, добавляем слово в множество, чтобы исключить дубликаты. После отработки всех циклов длина множества показывает количество допустимых слов.

ans = set()  # множество для хранения неповторяющихся подходящих слов
alf = "ПОБЕДА"  # допустимые буквы

# задаём каждую из 9 букв через циклы
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:
                                for x9 in alf:
                                    # составляем слово
                                    w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9

                                    # проверяем, что буква П встречается не более 6 раз
                                    if w.count("П") <= 6:
                                        ans.add(w)  # добавляем подходящее слово

print(len(ans))  # выводим ответ

Решение программой (itertools):
Для решения с помощью модуля itertools  воспользуемся функцией product  , которая генерирует все возможные слова длины 9 с повторениями из заданного алфавита. Для каждого слова проверяем количество букв П аналогично решению с циклами и добавляем в множество, чтобы убрать дубликаты.

from itertools import product

ans = set()  # множество для хранения неповторяющихся подходящих слов
alf = "ПОБЕДА"  # допустимые буквы

# перебираем все слова длины 9
for w in product(alf, repeat=9):
    w = "".join(w)  # преобразуем кортеж в слово

    # проверяем, что буква П встречается не более 6 раз
    if w.count("П") <= 6:
        ans.add(w)  # добавляем подходящее слово

print(len(ans))  # выводим ответ

Ответ: 10076750

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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