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

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

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

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

Задача 1#7283

Даниил составляет пары слов. Первое 3-буквенное слово состоит из букв М, А, Г, а второе 6-буквенное из букв Ц, А, Р, Ь. Каждая из букв первого слова может встречаться в нём ровно один раз, а каждая из букв второго слова может встречаться в нём любое количество раз или не встречаться совсем. Сколько различных пар слов может составить Даниил?

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

В первом слове Даниил первой буквой может поставить любую из 3 доступных букв, второй буквой — любую из оставшихся 2, а третьей последнюю оставшуюся букву. Значит первое слово можно составить 3 ⋅ 2 ⋅ 1 = 6  способами. Во втором слове на каждое из 6 мест в слове можно поставить любую из 4 различных букв. Значит второе слово можно составить 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 4 = 4096  способами.

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

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

Для решения задачи с помощью циклов создаём вложенные циклы для каждой позиции первого слова (3 цикла, по одной букве из набора М, А, Г). После формирования комбинации проверяем, что все буквы уникальны с помощью сравнения длины строки и длины множества букв.

Для второго слова используем шесть вложенных циклов (по одной букве из набора Ц, А, Р, Ь). Каждая комбинация второго слова формируется без проверки на уникальность, так как буквы могут повторяться.

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

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

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

# набор букв для второго слова
alf2 = ’ЦАРЬ’

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

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

Для решения задачи с помощью модуля itertools используем функции permutations для первого слова (так как буквы должны быть уникальными) и product для второго слова (так как буквы могут повторяться).

Каждое полученное сочетание первого и второго слова объединяем в пару и добавляем во множество ans. В конце программы выводим количество элементов множества, что соответствует числу всех уникальных пар слов.

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

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

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

# набор букв для второго слова
alf2 = ’ЦАРЬ’

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

Ответ: 24576

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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