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

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

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

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

Задача 1#59473

Сколько существует различных 8-значных чисел, в которых ни одна четная цифра не стоит рядом с четной и ни одна нечетная цифра не стоит рядом с нечетной?

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

Решение руками

Существует всего 2 варианта расстановки цифр:

Ч Н Ч Н Ч Н Ч Н

Н Ч Н Ч Н Ч Н Ч

Четных цифр всего 5, но 0 не может стоять на 1 месте. Нечетных также 5, среди них нет ограничений. Тогда получаем: 4⋅57 + 58 = 703125  .

Решение через циклы
Составляем программу для перебора всех 8-значных чисел, в которых ни одна чётная цифра не стоит рядом с другой чётной, а ни одна нечётная — рядом с другой нечётной. Всего существуют два возможных шаблона чередования цифр: ЧНЧНЧНЧН и НЧНЧНЧНЧ, где Ч — чётная цифра, а Н — нечётная. Для каждого числа проверяем, что первая цифра не равна нулю в случае, если число начинается с чётной цифры (так как число станет семизначным), и формируем число по шаблону, перебирая все варианты цифр через циклы. Если число соответствует шаблону, добавляем его в множество, чтобы исключить дубликаты. В конце длина множества показывает количество допустимых чисел.

chet = "02468"
nechet = "13579"

count = set()
# составляем число вида ЧНЧНЧНЧН, где Ч - четная цифра, а Н - нечётная цифра
for x1 in "2468":  # число не может начинаться с 0
    for x2 in nechet:
        for x3 in chet:
            for x4 in nechet:
                for x5 in chet:
                    for x6 in nechet:
                        for x7 in chet:
                            for x8 in nechet:
                                s = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
                                count.add(s)
# составляем число вида НЧНЧНЧНЧ, где Ч - четная цифра, а Н - нечётная цифра
for x1 in nechet:
    for x2 in chet:
        for x3 in nechet:
            for x4 in chet:
                for x5 in nechet:
                    for x6 in chet:
                        for x7 in nechet:
                            for x8 in chet:
                                s = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
                                count.add(s)
print(len(count))

Решение через itertools
Для решения задачи с помощью модуля itertools мы используем функцию product, которая генерирует все возможные 8-значные последовательности цифр с повторениями. Каждое число представлено как кортеж цифр, и сначала проверяем, что оно не начинается с нуля (чтобы число не стало семизначным). Далее идёт проверка условия чередования чётных и нечётных цифр: проходим по всем парам соседних цифр и сравниваем их чётность. Если находим пару с одинаковой чётностью, число не подходит, и проверка прерывается. Если все соседние цифры чередуются корректно, счётчик увеличивается на единицу. В конце выводим значение счётчика, которое соответствует количеству всех допустимых 8-значных чисел.

from itertools import product

count = 0  # счётчик допустимых чисел

# генерируем все 8-значные последовательности цифр
for num in product("0123456789", repeat=8):
    if num[0] == "0":  # пропускаем числа, начинающиеся с нуля
        continue

    # проверяем чередование четных и нечетных цифр
    ok = True
    for i in range(7):
        # проверяем чётность соседних цифр
        if int(num[i]) % 2 == int(num[i + 1]) % 2:
            ok = False
            break

    if ok:
        count += 1  # увеличиваем счётчик, если число подходит

print(count)  # выводим ответ

Ответ: 703125

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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