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

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

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

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

Задача 1#60307

Сколько различных восьмибуквенных кодовых слов можно составить из букв Ф,А,К,Е,Л, если в каждом из них буква Ф встречается не менее 3 раз?

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

Всего восьмибуквенных слов 5*5*5*5*5*5*5*5 = 390625. Легче будет сначала сосчитать слова, где буква Ф встречается менее 3 раз, а затем отнять полученное количество от общего числа.

1) Буква Ф не встречается

Значит, в наборе будет доступно 4 буквы, вычисляем: 4*4*4*4*4*4*4*4 = 65536.

2) Буква Ф встречается 1 раз

Позиций, которые может занять буква Ф — 8, вычисляем кол-во слов, где буква Ф находится на одной конкретной позиции, и умножаем на 8:

8*(1*4*4*4*4*4*4*4) = 131072.

3) Буква Ф встречается 2 раза

Считаем количество перестановок двух букв Ф: 8*7/2!=28

Кол-во перестановок умножаем на количество слов, где буква Ф встречается на двух конкретных позициях:

28*(1*1*4*4*4*4*4*4) = 114688.

Считаем, сколько слов существуем с тремя и более буквами Ф: 390625 - 65536 - 131072 - 114688 = 79329.
Решение через циклы
Составим программу для перебора всех 8-буквенных комбинаций из букв слова ФАКЕЛ с помощью вложенных циклов. Для каждой комбинации формируем слово через конкатенацию букв и проверяем условие, что буква Ф встречается не менее трёх раз, используя метод count. Если условие выполняется, увеличиваем счётчик допустимых слов. В конце выводим значение счётчика, что и будет ответом.

s = "ФАКЕЛ"  # доступные буквы
k = 0  # счётчик допустимых слов

# Перебор всех возможных 8-буквенных комбинаций
for a in s:
    for b in s:
        for c in s:
            for d in s:
                for e in s:
                    for f in s:
                        for g in s:
                            for h in s:
                                w = a + b + c + d + e + f + g + h  # формируем слово
                                if w.count("Ф") >= 3:  # проверяем условие
                                    k += 1  # если условия выполнены, увеличиваем счётчик
print(k)  # вывод результата

Решение через itertools
Для решения задачи с помощью модуля itertools воспользуемся функцией product. Она генерирует все возможные комбинации с повторениями из букв ФАКЕЛ длиной 8. Именно это нам нужно, так как каждая буква может встречаться произвольное количество раз (включая полное отсутствие). Условие «буква Ф встречается не менее трёх раз» записывается в программе аналогично решению с помощью циклов. Если слово подходит, увеличиваем счётчик, в конце выводим его.

from itertools import product

s = "ФАКЕЛ"  # исходный набор букв
n = 0  # счётчик допустимых слов

for x in product(s, repeat=8):
    w = "".join(x)  # Преобразуем комбинацию в строку
    if w.count("Ф") >= 3:
        n += 1
print(n)

Ответ: 79329

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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