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

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

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

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

Задача 1#65603

Петя составляет шестибуквенные слова перестановкой букв слова УРШИКУ. При этом он избегает слов с двумя подряд одинаковыми буквами. Сколько всего различных слов может составить Петя?

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

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

Решим от обратного. Посчитаем всевозможные варианты и вычтем те варианты, которые нас не устраивают (в которых буква "У"встречается подряд). Всего вариантов перестановок: (6⋅5⋅4 ⋅3⋅2⋅1)
---------------= 360
      2  . Делим на два, потому что УУ - это один вариант написания, а подсчитано будет, как два разных. Теперь вычтем варианты, где встречается "УУ"

У ⋅ У ⋅4⋅3 ⋅2⋅1

4⋅ У ⋅ У⋅3⋅2⋅1

4⋅3⋅ У ⋅ У⋅2⋅1

4⋅3 ⋅2⋅ У ⋅ У⋅1

4⋅3 ⋅2⋅1⋅ У ⋅ У

Значит, вариантов где встречается "УУ всего 24⋅5 = 120  . Итого искомое кол-во слов равно 360 - 120 = 240.

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

Для решения задачи через циклы мы будем поэтапно формировать все шестибуквенные слова из букв слова «УРШИКУ» и проверять их на выполнение двух условий: слово должно содержать ровно две буквы «У» и не должно иметь двух одинаковых букв подряд. Алгоритм реализуется следующим образом:

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

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

1. for x1 in a — выбираем первую букву слова.

2. for x2 in a, ..., for x6 in a — перебираем все возможные варианты букв для остальных позиций слова.

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

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

- s.count(’У’) == 2 — проверяем, что буква «У» встречается ровно дважды.

- len(set(s)) == 5 — проверяем, что все остальные буквы уникальны (так как всего 6 букв, а буква «У» встречается дважды, длина множества должна быть 5).

- ’УУ’ not in s — проверяем, что нет двух одинаковых букв «У» подряд.

Если слово удовлетворяет всем условиям, добавляем его в множество count.

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

# Исходный набор букв
a = ’УРШИКУ’

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

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

# Выводим количество допустимых слов
print(len(count))

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

Для решения задачи с помощью модуля itertools используем функцию permutations, которая генерирует все возможные перестановки букв слова «УРШИКУ». Каждая перестановка формируется в виде кортежа, который преобразуем в строку с помощью ’’.join(x).

Условие «не должно быть двух одинаковых букв подряд» проверяем с помощью условия ’УУ’ not in s. Если оно выполняется, добавляем слово в множество count для исключения дубликатов.

В конце выводим len(count) — количество допустимых слов.

from itertools import permutations  # Импортируем функцию для генерации перестановок

# Множество для хранения допустимых слов
count = set()

# Перебираем все возможные перестановки букв исходного слова
for x in permutations(’УРШИКУ’):
    # Преобразуем кортеж в строку
    s = ’’.join(x)
    # Проверяем условие: нет двух одинаковых букв "У" подряд
    if ’УУ’ not in s:
        # Добавляем слово в множество
        count.add(s)

# Выводим количество допустимых слов
print(len(count))

Ответ: 240

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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