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

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

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

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

Задача 1#7295

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

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

Первой идёт одна из 4  чётных цифр, второй одна из 3  оставшихся, т.к. одна уже использована, третьей одна из 2  оставшихся и четвёртой последняя оставшаяся цифра. Пятой идёт одна из 5  нечётных цифр, шестой — одна из 4  оставшихся, седьмой — одна из 3  оставшихся и восьмой — одна из 2  оставшихся. Значит друг может составить 4 ⋅ 3 ⋅ 2 ⋅ 1 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 2 = 2880  различных чисел.
Решение кодом через циклы:

Решение через циклы строится на полном переборе всех возможных восьмизначных чисел с условием уникальности цифр. Сначала создаём пустое множество ans для хранения уникальных чисел, определяем строки chet = ’2468’ для чётных и nechet = ’13579’ для нечётных цифр. Далее используем восемь вложенных циклов для перебора каждой позиции числа: первые четыре цикла формируют чётные цифры (x1, x2, x3, x4), следующие четыре — нечётные (x5, x6, x7, x8). Формируем число как строку w = x1+x2+x3+x4+x5+x6+x7+x8. Затем проверяем условие уникальности: len(w) == len(set(w)). Если все цифры уникальны, число добавляется в множество ans. В конце выводим len(ans), что является количеством допустимых чисел.

# Создаем множество для хранения уникальных чисел
ans = set()
# Определяем чётные цифры
chet = ’2468’
# Определяем нечётные цифры
nechet = ’13579’

# Перебор всех чётных цифр для первых четырёх позиций
for x1 in chet:
    for x2 in chet:
        for x3 in chet:
            for x4 in chet:
                # Перебор всех нечётных цифр для последних четырёх позиций
                for x5 in nechet:
                    for x6 in nechet:
                        for x7 in nechet:
                            for x8 in nechet:
                                # Формируем восьмизначное число
                                w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
                                # Проверяем уникальность всех цифр
                                if len(w) == len(set(w)):
                                    # Добавляем число в множество
                                    ans.add(w)
# Выводим количество уникальных чисел
print(len(ans))

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

Для более компактного решения используем функцию permutations из модуля itertools, которая генерирует все возможные перестановки без повторений. Сначала импортируем функцию, создаём пустое множество ans и определяем строки chet = ’2468’ и nechet = ’13579’. С помощью permutations(chet, 4) формируем все перестановки чётных цифр, аналогично permutations(nechet, 4) для нечётных цифр. Для каждой комбинации объединяем перестановки через ”.join() в строку w и добавляем её в множество ans. В конце выводим len(ans), что является количеством допустимых чисел.

from itertools import permutations

# Создаем множество для хранения уникальных чисел
ans = set()
# Чётные цифры
chet = ’2468’
# Нечётные цифры
nechet = ’13579’

# Перебор всех перестановок чётных цифр
for x1 in permutations(chet, 4):
    # Перебор всех перестановок нечётных цифр
    for x2 in permutations(nechet, 4):
        # Формируем число из двух частей
        w = ’’.join(x1) + ’’.join(x2)
        # Добавляем число в множество уникальных значений
        ans.add(w)

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

Ответ: 2880

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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