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

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

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

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

Задача 1#64015

Школьник составляет 9-буквенные слова, в которых есть только буквы П, О, Ч, Е, М, У. Каждую букву можно использовать любое количество раз. При этом известно, что буква П встречается не более 6 раз. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые школьник может написать?

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

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

Пусть буква П встречается более 6 раз, то есть 7, 8 или 9.

Число способов поставить букву П на 7 позиций из 9 равно: 9!
---= 36
2!7!  . Кроме буквы П в слове ПОЧЕМУ есть 5 букв. Тогда, число возможных слов в таком случае 36 ⋅5 ⋅5 = 900  .

Число способов поставить букву П на 8 позиций из 9 равно:  9!
--- = 9
1!8!  . Кроме буквы П в слове ПОЧЕМУ есть 5 букв. Тогда, число возможных слов в таком случае 9⋅5 = 45  .

Число способов поставить букву П на 9 позиций из 9 равно 1 и всего есть одно слово со всеми буквами П.

Общее число слов, когда буква П встречается более 6 раз: 900+ 45 +1 = 946  .

Общее число слов, которые можно составить из букв слова ПОЧЕМУ:  9
6 = 10077696  .

Тогда число слов, где буква П используется не более 6 раз: 10077696− 946 = 10076750  .

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

Для решения задачи используем полный перебор всех возможных 9-буквенных слов, составленных из букв «ПОЧЕМУ». Идея заключается в том, чтобы с помощью 9 вложенных циклов поочерёдно выбирать букву на каждой позиции слова и проверять условие по количеству букв «П».

Шаги решения: 1. Задаём переменную-счётчик count для подсчёта подходящих слов.

2. Определяем строку s = ’ПОЧЕМУ’ как алфавит доступных букв.

3. Организуем 9 вложенных циклов, где каждая переменная цикла (a, b, c, d, e, f, g, h, k) отвечает за выбор буквы на соответствующей позиции слова.

4. Внутри самого глубокого цикла формируем слово st = a + b + c + d + e + f + g + h + k.

5. Проверяем условие: количество букв «П» в слове не больше 6 с помощью st.count(’П’) <= 6.

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

count = 0           # переменная-счётчик допустимых слов
s = ’ПОЧЕМУ’        # набор доступных букв

# Перебираем все возможные буквы для первой позиции
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:
                                # Перебор букв для девятой позиции
                                for k in s:
                                    # Формируем слово из выбранных букв
                                    st = a + b + c + d + e + f + g + h + k
                                    # Проверяем ограничение: "П" встречается не более 6 раз
                                    if st.count(’П’) <= 6:
                                        # Если условие выполнено, увеличиваем счётчик
                                        count += 1

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

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

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

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

3. С помощью product(’ПОЧЕМУ’, repeat=9) перебираем все кортежи длиной 9, представляющие слова.

4. Преобразуем кортеж в строку через s = ”.join(x).

5. Проверяем, что количество букв «П» не больше 6 с помощью s.count(’П’) <= 6.

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

7. В конце выводим количество уникальных слов с помощью len(count).

from itertools import product # импортируем функцию product

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

# Перебор всех 9-буквенных комбинаций с повторениями
for x in product(’ПОЧЕМУ’, repeat = 9):
    # Преобразуем кортеж символов в строку
    s = ’’.join(x)
    # Проверяем, что букв "П" не более 6
    if s.count(’П’) <= 6:
        # Если условие выполнено, добавляем слово во множество
        count.add(s)

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

Ответ: 10076750

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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