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

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

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

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

Задача 1#50786

В качестве кодовых слов Витя использует 6-буквенные слова, в которых есть только буквы М,А,Т,Е,Р,И,К, причём буква Р появляется ровно 2 раза. Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько различных кодовых слов может составить Витя?

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

Всего позиций 6, две из них отводится под букву Р, а на оставшихся четырех местах может находиться любая буква из шестибуквенного набора М,А,Т,Е,И,К:

Р Р * * * * → Р Р 6 6 6 6 → 1⋅1 ⋅6⋅6⋅6 ⋅6 = 1296  вариантов слов, когда буква Р стоит на первой и второй позиции.

Теперь нужно найти количество перестановок двух букв Р, это считается по формуле: 62⋅5! = 15  перестановок, где 6 - это сколькими способами мы можем выбрать место для первой буквы Р, 5 - сколькими способами мы можем выбрать место для второй буквы Р(5, так как одно место уже занято), поэтому всего вариантов 6⋅5  , но так как буквы одинаковые, то нужно поделить еще на 2!, чтобы исключить повторение.

Тогда общее количество слов: 1296⋅15 = 19440  .

Решение программой (циклы):
Составим программу для перебора всех возможных 6-буквенных кодовых слов, которые включают только буквы М, А, Т, Е, Р, И, К. Для этого организуем 6 вложенных циклов, по одному на каждую букву. Каждый цикл перебирает буквы из строки "МАТЕРИК формируя все возможные комбинации.
После формирования каждого слова проверяем условие: буква Р должна встречаться ровно два раза. Для этого используем метод count. Если комбинация проходит проверку, добавляем её в множество. После завершения циклов выводим длину множества, получая количество различных кодовых слов.

ans = set()  # множество для кодовых слов
alf = ’МАТЕРИК’  # доступные буквы

# Перебор всех возможных 6-буквенных комбинаций
for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        # проверяем, что Р встречается ровно два раза
                        if w.count(’Р’) == 2:
                            ans.add(w)
print(len(ans))  # выводим количество уникальных кодовых слов

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

from itertools import product

ans = set()
alf = ’МАТЕРИК’

# Генерируем все возможные 6-буквенные комбинации из букв
for w in product(alf, repeat=6):
    w = ’’.join(w)  # преобразуем кортеж в строку

    # проверяем, что Р встречается ровно два раза
    if w.count(’Р’) == 2:
        ans.add(w)
print(len(ans))  # выводим количество уникальных кодовых слов

Ответ: 19440

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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