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

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

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

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

Задача 1#65602

Отец составляет 4-буквенные слова, в которых есть только буквы М, О, К, А, Р, причём буква О используется в них не более 3-х раз (или не используется совсем). Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Отец?

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

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

Решим от обратного. Посчитаем всевозможные варианты и вычтем те варианты, которые нас не устраивают (в которых буква "О"встречается 4 раза).

Всего вариантов: 5⋅5⋅5 ⋅5 = 625

Нас не устраивает один единственный вариант, когда на всех 4-х позициях стоит буква "О". Значит, искомое кол-во слов = 625 − 1 = 624

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

Для решения задачи через циклы мы будем поэтапно формировать все четырёхбуквенные слова из букв М, О, К, А, Р и проверять их на условие: буква О встречается не более 3 раз. Алгоритм реализуется следующим образом:

Сначала создаём строку s = ’МОКАР’, содержащую все допустимые буквы. Создаём переменную-счётчик k = 0, которая будет увеличиваться на 1 для каждого слова, удовлетворяющего условию.

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

1. for a in s — перебираем буквы для первой позиции.

2. for b in s — перебираем буквы для второй позиции.

3. for c in s — перебираем буквы для третьей позиции.

4. for d in s — перебираем буквы для четвёртой позиции.

Внутри циклов формируем слово w = a+b+c+d. Затем проверяем, что буква О встречается не более 3 раз: if w.count(’О’) <= 3. Если условие выполняется, увеличиваем счётчик k на 1.

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

# Создаём строку с допустимыми буквами
s = ’МОКАР’

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

# Перебираем буквы для первой позиции
for a in s:
    # Перебираем буквы для второй позиции
    for b in s:
        # Перебираем буквы для третьей позиции
        for c in s:
            # Перебираем буквы для четвёртой позиции
            for d in s:
                # Формируем слово из выбранных букв
                w = a+b+c+d
                # Проверяем условие: буква ’О’ встречается не более 3 раз
                if w.count(’О’) <= 3:
                    # Если условие выполнено, увеличиваем счётчик
                    k += 1
# Выводим количество допустимых слов
print(k)

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

Для упрощения перебора всех комбинаций букв используем модуль itertools и функцию product, которая генерирует декартово произведение букв с повторением 4 раза (для 4 позиций слова).

1. Импортируем функцию product из модуля itertools.

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

3. Перебираем все возможные комбинации букв: for x in product(’МОКАР’, repeat=4).

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

5. Проверяем, что буква О встречается не более 3 раз: if s.count(’О’) <= 3. Если условие выполнено, добавляем слово в множество count.

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

from itertools import product  # Импортируем функцию product для генерации комбинаций

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

# Перебираем все возможные 4-буквенные комбинации букв
for x in product(’МОКАР’, repeat=4):
    # Преобразуем кортеж в строку
    s = ’’.join(x)
    # Проверяем условие: буква ’О’ встречается не более 3 раз
    if s.count(’О’) <= 3:
        # Если условие выполнено, добавляем слово в множество
        count.add(s)

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

Ответ: 624

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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