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

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

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

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

Задача 1#61624

Максим придумывает 12-буквенные слова, состоящие из букв слова ЕВКЛИД. Сколько слов, содержащих комбинацию ЕВКЛИД, может составить Максим, если справа от этой комбинации находятся только гласные в обратном алфавитном порядке (больше 0), а слева равное количество (больше 0) гласных и согласных. Буквы в словах могут повторяться любое количество раз или же не встречаться вовсе.

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

Решение аналитически:

Всего существует два варианта: когда справа от слова ЕВКЛИД 4 буквы, а слева 2; когда справа 2 буквы, а слева 4. Рассмотрим каждый из них.

1. Если справа 4 буквы, то есть 5 способов расставить гласные: ИИИИ, ИИИЕ, ИИЕЕ, ИЕЕЕ, ЕЕЕЕ. Если слева 2 буквы, то есть 16 способов расставить гласные и согласные – 2 ⋅4⋅2 = 16  . Получаем общее число для этого варианта: 5 ⋅16 = 80  .

2. Если справа 2 буквы, то есть 3 способа расставить гласные: ИИ, ИЕ, ЕЕ. Если слева 4 буквы, то есть 384 способа расставить гласные и согласные – 2⋅4 ⋅2⋅4⋅6 = 384  . Получаем общее число для этого варианта: 3 ⋅384 = 1152  .

Всего число вариантом слов: 80+ 1152 = 1232  .

Решение программой с помощью циклов:

Напишем программу для перебора всевозможных 6-буквенных слов из заданных букв. Для этого организуем 6  вложенных циклов (по одному на каждую позицию в слове). Каждый цикл перебирает буквы заданной строки, формируя все возможные комбинации. Запишем количество подходящих слов.

count = set() # Множество подходящих слов
# Идея решения заключается в том, чтобы исключить условие из задачи про ЕВКЛИД в слове, считая, по умолчанию, что оно выполнено. Таким образом, мы сокращаем перебор и уменьшаем время выполнения программы.
# Есть две вариации слова, которое удовлетворяет всем условиям: **ЕВКЛИД**** и ****ЕВКЛИД**, то есть 2 буквы слева и 4 справа или 4 буквы слева и 4 справа
gl = "ЕИ" # Гласные к задаче
sogl = "ВКЛД" # Согласные к задаче
a = "ЕВКЛИД" # Алфавит к задаче

for x1 in a:
    for x2 in a:
        for x3 in gl:
            for x4 in gl:
                for x5 in gl:
                    for x6 in gl:
                        s1 = x1+x2
                        s2 = x3+x4+x5+x6
                        # Если количество гласных равно количеству согласных в первой части
                        if len([i for i in s1 if i in gl]) == len([i for i in s1 if i in sogl]):
                            # Если гласные идут в обратном алфавитном порядке во второй части
                            if all(s2[i] >= s2[i + 1] for i in range(len(s2) - 1)):
                                count.add(s1 + s2) # Соединим слово и добавим в список

for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in gl:
                    for x6 in gl:
                        s1 = x1+x2+x3+x4
                        s2 = x5+x6
                         # Если количество гласных равно количеству согласных в первой части
                        if len([i for i in s1 if i in gl]) == len([i for i in s1 if i in sogl]):
                            # Если гласные идут в обратном алфавитном порядке во второй части
                            if all(s2[i] >= s2[i + 1] for i in range(len(s2) - 1)):
                                count.add(s1 + s2) # Соединим слово и добавим в список
print(len(count)) # Выведем нужную длину

Решение программой с помощью модуля itertools:

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

from itertools import product

count = set() # Множество подходящих слов

gl = "ЕИ" # Гласные к задаче
sogl = "ВКЛД" # Согласные к задаче
a = "ЕВКЛИД" # Алфавит к задаче
# Идея решения заключается в том, чтобы исключить условие из задачи про ЕВКЛИД в слове, считая, по умолчанию, что оно выполнено. Таким образом, мы сокращаем перебор и уменьшаем время выполнения программы.
# Есть две вариации слова, которое удовлетворяет всем условиям: **ЕВКЛИД**** и ****ЕВКЛИД**, то есть 2 буквы слева и 4 справа или 4 буквы слева и 4 справа
for x1 in product(a,repeat = 2): # Перебираем буквы для левой части
    for x2 in product(gl,repeat = 4): # Перебираем гласные буквы для правой части
        s1 = "".join(x1)
        s2 = "".join(x2)
        # Если количество гласных равно количеству согласных в первой части
        if len([i for i in s1 if i in gl]) == len([i for i in s1 if i in sogl]):
            # Если гласные идут в обратном алфавитном порядке во второй части
            if all(s2[i] >= s2[i + 1] for i in range(len(s2) - 1)):
                count.add(s1 + s2) # Соединим слово и добавим в список

for x1 in product(a,repeat = 4): # Перебираем буквы для левой части
    for x2 in product(gl,repeat = 2): # Перебираем гласные буквы для правой части
        s1 = "".join(x1) # join объединяет буквы
        s2 = "".join(x2) # join объединяет буквы
        # Если количество гласных равно количеству согласных в первой части
        if len([i for i in s1 if i in gl]) == len([i for i in s1 if i in sogl]):
            if all(s2[i] >= s2[i + 1] for i in range(len(s2) - 1)): # Если гласные идут в обратном алфавитном порядке во второй части
                count.add(s1 + s2) # Соединим слово и добавим в список
print(len(count)) # Выведем нужную длину

Ответ: 1232

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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