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

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

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

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

Задача 1#7281

Александр составляет пары слов. Первое 3-буквенное слово состоит из букв М, О, Д, а второе 4-буквенное из букв С, П, И, Н. Каждая из букв может встречаться в словах любое количество раз или не встречаться вовсе. Сколько различных пар слов может составить Александр?

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

В первом слове на каждое из 3 мест в слове можно поставить любую из 3 различных букв. Значит первое слово можно составить 3 ⋅ 3 ⋅ 3 = 27  способами. Во втором слове на каждое из 4 мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 = 256  способами.

Представим, что первые слова — чашки, а вторые слова — блюдца. Сколько различных вариаций кружка+чашка можно составить?

Можно составить 27 ⋅ 256 = 6912  различных пар слов (блюдец с чашкой).
Решение кодом через циклы:

Для решения задачи с помощью циклов мы будем формировать все возможные пары слов. Первое слово имеет длину 3 буквы, поэтому создаём три вложенных цикла — каждый цикл перебирает все буквы из набора МОД для одной позиции слова. Второе слово имеет длину 4 буквы, и мы создаём четыре вложенных цикла — каждый перебирает буквы из набора СПИН для соответствующей позиции второго слова.

После того как сформировано первое и второе слово, мы объединяем их в пару и добавляем в множество ans. Множество автоматически хранит только уникальные элементы, поэтому одинаковые пары слов не будут посчитаны дважды. В этой задаче дополнительных условий нет — буквы могут повторяться и занимать любые позиции.

Таким образом, программа перебирает все возможные комбинации букв для каждого слова, формирует пары и считает уникальные варианты.

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

# набор букв для первого слова
alf1 = ’МОД’

# набор букв для второго слова
alf2 = ’СПИН’

# перебор всех букв для первой позиции первого слова
for x1 in alf1:
    # перебор всех букв для второй позиции первого слова
    for x2 in alf1:
        # перебор всех букв для третьей позиции первого слова
        for x3 in alf1:
            # формируем первое слово
            w1 = x1 + x2 + x3
            # перебор всех букв для первой позиции второго слова
            for y1 in alf2:
                # перебор всех букв для второй позиции второго слова
                for y2 in alf2:
                    # перебор всех букв для третьей позиции второго слова
                    for y3 in alf2:
                        # перебор всех букв для четвертой позиции второго слова
                        for y4 in alf2:
                            # формируем второе слово
                            w2 = y1 + y2 + y3 + y4
                            # добавляем пару слов во множество
                            ans.add((w1, w2))
# выводим количество уникальных пар слов
print(len(ans))

Решение кодом через itertools:

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

Сначала генерируем все комбинации длиной 3 для первого слова, затем для каждой такой комбинации генерируем все комбинации длиной 4 для второго слова. После этого формируем пару слов и добавляем её в множество ans, чтобы исключить повторения. Такой подход полностью повторяет логику циклов, но код получается короче и нагляднее.

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

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

# набор букв для первого слова
alf1 = ’МОД’

# набор букв для второго слова
alf2 = ’СПИН’

# перебираем все комбинации длиной 3 для первого слова
for x in product(alf1, repeat=3):
    # перебираем все комбинации длиной 4 для второго слова
    for y in product(alf2, repeat=4):
        # добавляем пару слов во множество
        ans.add((x, y))
# выводим количество уникальных пар слов
print(len(ans))

Ответ: 6912

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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