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

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

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

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

Задача 1#84847

Таина составляет 6-буквенные слова перестановкой букв слова МАШИНА. При этом в слове буква А не может стоять на первом, а буква Ш не может стоять на последнем месте. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько слов может составить Таина?

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

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

Общее количество перестановок без ограничений с учетом повторений двух букв А: 6!2!-= 360  .

1. Слова, где А на первом месте:

Фиксируем А на первой позиции. Остаётся 5 букв (М, Ш, И, Н, А), из них А повторяется 1 раз. Итого: 5! = 120  .

2. Слова, где Ш на последнем месте:

Фиксируем Ш на последней позиции. Остаётся 5 букв (М, А, И, Н, А), из них А повторяется 2 раза. Число перестановок:5!2! = 60  .

3. Слова, где А на первом месте и Ш на последнем:

Фиксируем А на 1-й позиции и Ш на 6-й. Остаётся 4 буквы (М, И, Н, А), все уникальны. Число перестановок: 4! = 24  .

Общее число запрещённых перестановок: 120  (А на первом) + 60  (Ш на последнем) − 24  (оба условия) = 156  .

Вычитаем запрещённые перестановки из общего числа: 360 − 156 = 204  .

Решение через циклы:

Для решения задачи через циклы мы будем поэтапно формировать все возможные 6-буквенные слова перестановкой букв слова "МАШИНА"и проверять их на выполнение условий: буква А не может стоять на первой позиции, буква Ш не может стоять на последней позиции. Также учитываем, что в слове буква А встречается дважды.

Сначала создаём строку a = ’МАШИНА’, которая содержит все буквы исходного слова. Создаём пустое множество count = set() для хранения уникальных допустимых слов.

Далее используем 6 вложенных циклов for, по одному на каждую позицию слова:

1. for x1 in ’МШИН’ — выбираем первую букву слова. Буква А не может быть первой, поэтому исключаем её из перебора.

2. for x2 in a, ..., for x5 in a — выбираем буквы для второй, третьей, четвёртой и пятой позиций. Используем все буквы слова.

3. for x6 in ’МАИНА’ — выбираем последнюю букву слова. Буква Ш не может быть последней, поэтому перебираем все буквы кроме Ш.

Внутри циклов формируем строку s = x1+x2+x3+x4+x5+x6, которая представляет текущее слово.

Затем проверяем два условия:

1. Все буквы слова, кроме буквы А, уникальны len(set(s)) == 5. Функция set() создаёт множество уникальных элементов.

2. Буква А встречается ровно дважды s.count(’А’) == 2.

Если оба условия выполняются, добавляем слово в множество count.

После завершения перебора всех комбинаций выводим размер множества len(count) — это и есть количество допустимых слов.

# Создаём строку с буквами исходного слова
a = ’МАШИНА’

# Создаём множество для хранения уникальных слов
count = set()

# Перебор первой буквы (А исключаем)
for x1 in ’МШИН’:
    # Перебор второй буквы
    for x2 in a:
        # Перебор третьей буквы
        for x3 in a:
            # Перебор четвёртой буквы
            for x4 in a:
                # Перебор пятой буквы
                for x5 in a:
                    # Перебор последней буквы (Ш исключаем)
                    for x6 in ’МАИНА’:
                        # Формируем слово
                        s = x1+x2+x3+x4+x5+x6
                        # Проверяем условия: буква А встречается 2 раза, остальные буквы уникальны
                        if len(set(s)) == 5 and s.count(’А’) == 2:
                            # Добавляем слово в множество
                            count.add(s)
# Выводим количество допустимых слов
print(len(count))

Решение через itertools:

Для решения задачи с помощью модуля itertools используем функцию permutations. Она генерирует все перестановки букв слова "МАШИНА"без повторений, учитывая, что буква А встречается дважды.

1. Преобразуем кортеж x в строку s с помощью ’’.join(x).

2. Проверяем, что первая буква не А: s[0] != ’А’.

3. Проверяем, что последняя буква не Ш: s[-1] != ’Ш’.

4. Если условия выполнены, увеличиваем счётчик count.

Так как буква А встречается дважды, все перестановки учитывают дубли, поэтому в конце делим результат на 2 для корректного подсчёта уникальных слов.

from itertools import permutations

# Счётчик допустимых слов
count = 0

# Перебираем все перестановки букв слова "МАШИНА"
for x in permutations(’МАШИНА’):
    # Преобразуем кортеж в строку
    s = ’’.join(x)
    # Проверяем условия: первая буква не А, последняя буква не Ш
    if s[0] != ’А’ and s[-1] != ’Ш’:
        # Увеличиваем счётчик допустимых слов
        count += 1

# Так как буква А повторяется дважды, делим результат на 2
print(count/2)

Ответ: 204

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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