8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Определите количество пятизначных чисел, записанных в шестнадцатеричной системе счисления, в записи которых ровно одна цифра 4, при этом никакая нечётная цифра не стоит рядом с цифрой 4.
Примечание: в этой задаче число может начинаться с 0.
Решение руками
В пятизначном числе цифра 4 может находиться на одной из 5 позиций:
4 на 1-й позиции: 4 _ _ _ _
4 на 2-й позиции: _ 4 _ _ _
4 на 3-й позиции: _ _ 4 _ _
4 на 4-й позиции: _ _ _ 4 _
4 на 5-й позиции: _ _ _ _ 4
Рассмотрим каждую из позиций.
1 позиция: Сосед справа не может быть нечётной - 7 вариантов. Остальные цифры любые, кроме 4 (15 вариантов).
Итого: . Аналогичным образом считается 5 позиция.
2 позиция: Соседи справа и слева не могут быть нечётными - каждый по 7 вариантов. Остальные цифры любые, кроме
4. Итого: . Аналогичным образом считаются 3 и 4 позиция.
Суммируем все случаи 23625(1-я позиция) + 11025(2-я) + 11025(3-я) + 11025(4-я) + 23625(5-я) = 80325.
Решение через циклы
Напишем программу для перебора всех 5-значных чисел в шестнадцатеричной системе (от 0 до F). Для этого организуем 5 вложенных циклов, формирующих все комбинации цифр. После составления числа проверяем условия: число содержит ровно одну цифру 4 (используем метод count), а каждая соседняя с ней цифра является чётной. Для проверки второго условия рассматриваем три случая расположения четвёрки:
- В начале числа: проверяем цифру после 4;
- В конце числа: проверяем цифру перед 4;
- В любом другом месте: проверяем цифры до и после 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)) # вывод количества чисел, удовлетворяющих условиям
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!