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

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

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

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

Задача 1#7297

Друг составляет пары чисел, используя цифры от 1 до 6. Первое число состоит из 2 цифр, а второе — из 5. Цифры в каждом из чисел могут использоваться только 1 раз или не использоваться совсем. Сколько различных пар чисел друг может составить?

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

В первом числе друг может на первую позицию поставить одну из 6 цифр, а на вторую — одну из 5 оставшихся. Значит первое число можно составить 6 ⋅ 5 = 30  различными способами. Во втором числе на первой позиции может стоять любая из 6 цифр, на второй — любая из 5 оставшихся, на третьей — любая из 4 оставшихся, на четвёртой — любая из 3 оставшихся и на пятой — любая из 2 оставшихся цифр. Значит второе число можно составить 6 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 = 720  различными способами.

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

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

Решение через циклы строится на полном переборе всех возможных комбинаций для каждого числа с учётом уникальности цифр. Сначала создаём пустое множество ans для хранения всех уникальных пар чисел. Определяем строки alf1 = ’123456’ и alf2 = ’123456’ для возможных цифр первого и второго числа. Используем два вложенных цикла для перебора цифр первого числа (x1, x2) и формируем число w1 = x1+x2. Проверяем уникальность цифр с помощью len(w1) == len(set(w1)). Если цифры уникальны, продолжаем перебор второго числа с пятью вложенными циклами (y1, y2, y3, y4, y5), формируем w2 = y1+y2+y3+y4+y5 и проверяем уникальность. Если оба числа соответствуют условиям, добавляем пару (w1, w2) в множество ans. В конце выводим len(ans), что является количеством допустимых пар чисел.

# Создаем множество для хранения уникальных пар чисел
ans = set()
# Цифры для первого числа
alf1 = ’123456’
# Цифры для второго числа
alf2 = ’123456’

# Перебор цифр первого числа
for x1 in alf1:
    for x2 in alf1:
        # Формируем первое число
        w1 = x1 + x2
        # Проверяем, что цифры первого числа уникальны
        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:
                                # Формируем второе число
                                w2 = y1 + y2 + y3 + y4 + y5
                                # Проверяем уникальность цифр второго числа
                                if len(w2) == len(set(w2)):
                                    # Добавляем пару в множество
                                    ans.add((w1, w2))
# Выводим количество уникальных пар чисел
print(len(ans))

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

Для решения с помощью модуля itertools используем функцию permutations, которая генерирует все перестановки без повторений. Создаём пустое множество ans для хранения уникальных пар, определяем строки alf1 = ’123456’ и alf2 = ’123456’. С помощью permutations(alf1, 2) получаем все перестановки двух цифр для первого числа, аналогично permutations(alf2, 5) для второго числа. Для каждой комбинации объединяем цифры через ”.join() в строки и добавляем пару (x, y) в множество ans. В конце выводим len(ans), что даёт количество допустимых пар чисел.

from itertools import permutations

# Создаем множество для хранения уникальных пар чисел
ans = set()
# Цифры для первого числа
alf1 = ’123456’
# Цифры для второго числа
alf2 = ’123456’

# Перебор всех перестановок для первого числа
for x in permutations(alf1, 2):
    # Перебор всех перестановок для второго числа
    for y in permutations(alf2, 5):
        # Добавляем пару чисел в множество
        ans.add((x, y))

# Выводим количество уникальных пар чисел
print(len(ans))

Ответ: 21600

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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