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

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

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

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

Задача 1#59229

Определите количество пятизначных чисел, записанных в шестнадцатеричной системе счисления, в записи которых ровно одна цифра 4, при этом никакая нечётная цифра не стоит рядом с цифрой 4.

Примечание: в этой задаче число может начинаться с 0.

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

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

В пятизначном числе цифра 4 может находиться на одной из 5 позиций:

4 на 1-й позиции: 4 _ _ _ _

4 на 2-й позиции: _ 4 _ _ _

4 на 3-й позиции: _ _ 4 _ _

4 на 4-й позиции: _ _ _ 4 _

4 на 5-й позиции: _ _ _ _ 4

Рассмотрим каждую из позиций.

1 позиция: Сосед справа не может быть нечётной - 7 вариантов. Остальные цифры любые, кроме 4 (15 вариантов). Итого: 1∗7 ∗15∗ 15∗ 15 = 23625  . Аналогичным образом считается 5 позиция.

2 позиция: Соседи справа и слева не могут быть нечётными - каждый по 7 вариантов. Остальные цифры любые, кроме 4. Итого: 7∗1 ∗7 ∗15∗ 15 = 11025  . Аналогичным образом считаются 3 и 4 позиция.

Суммируем все случаи 23625(1-я позиция) + 11025(2-я) + 11025(3-я) + 11025(4-я) + 23625(5-я) = 80325.

Решение через циклы

Напишем программу для перебора всех 5-значных чисел в шестнадцатеричной системе (от 0 до F). Для этого организуем 5 вложенных циклов, формирующих все комбинации цифр. После составления числа проверяем условия: число содержит ровно одну цифру 4 (используем метод count), а каждая соседняя с ней цифра является чётной. Для проверки второго условия рассматриваем три случая расположения четвёрки:

  1. В начале числа: проверяем цифру после 4;
  2. В конце числа: проверяем цифру перед 4;
  3. В любом другом месте: проверяем цифры до и после 4.

Если все условия выполнены, добавляем число в множество для исключения повторов.

a = "0123456789ABCDEF"
count = set()

# Перебор всех 5-значных чисел
for x1 in a:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    s = x1 + x2 + x3 + x4 + x5
                    if s.count("4") == 1:
                        ind = s.index("4")
                        if ind == 0:  # если 4 в начале
                            if int(s[ind + 1], 16) % 2 == 0:
                                count.add(s)
                        elif ind == 4:  # если 4 в конце
                            if int(s[ind - 1], 16) % 2 == 0:
                                count.add(s)
                        else:  # если 4 ни в начале, ни в конце
                            if int(s[ind - 1], 16) % 2 == 0 and int(s[ind + 1], 16) % 2 == 0:
                                count.add(s)
print(len(count))  # вывод количества чисел, удовлетворяющих условиям

Решение через itertools

Используем функцию product, которая генерирует все 5-значные комбинации из символов 0–F. Каждое число проверяем на наличие ровно одной цифры 4 и на то, чтобы все соседние с 4 цифры были чётными. Проверка аналогична решению через циклы. Все подходящие числа добавляем в список, и в конце выводим длину списка.

from itertools import product

ans = []

# Перебор всех 5-значных чисел
for i in product("0123456789ABCDEF", repeat=5):
    s = "".join(i)
    if s.count("4") == 1:
        ind = s.index("4")
        if ind == 0:  # если 4 в начале
            if int(s[ind + 1], 16) % 2 == 0:
                ans.append(s)
        elif ind == 4:  # если 4 в конце
            if int(s[ind - 1], 16) % 2 == 0:
                ans.append(s)
        else:  # если 4 ни в начале, ни в конце
            if int(s[ind - 1], 16) % 2 == 0 and int(s[ind + 1], 16) % 2 == 0:
                ans.append(s)
print(len(ans))  # вывод количества чисел, удовлетворяющих условиям

Ответ: 80325

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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