Вопрос от Анонимного юзера 06 апреля 2026 09:18
Определите количество 13-ричных семизначных чисел, в записи которых не менее двух цифр 5 и никакие две чётные и две нечётные цифры не стоят рядом. код на питоне через itertools
Ответ нейросети
06 апреля 2026 09:18
Задача: определить количество 7-значных чисел в базе 13 (цифры 0..12), в записи которых не менее двух цифр 5 и никакие две чётные и две нечётные цифры не стоят рядом. Также приведён код на Python через itertools.
- Понимание условий
- 7-значное число в base-13: первая цифра не ноль. Цифры принимаются из {0,1,2,...,12}. Чётные цифры: {0,2,4,6,8,10,12} (7 штук). Нечётные цифры: {1,3,5,7,9,11} (6 штук).
- "никакие две чётные и две нечётные цифры не стоят рядом" означает строгую чередование чётных и нечётных цифр: соседние цифры должны иметь противоположную парность.
- Чтобы первая цифра была не ноль, вPattern A (начинаем с чётной) первая цифра выбирается из чётных без нуля; вPattern B (начинаем с нечётной) первая цифра выбирается из нечётных.
- Разбиение на два паттерна чередования
- Pattern A (начинаем с чётной): позиции 1,3,5,7 — чётные (6 вариантов на первую, 7 на остальные); позиции 2,4,6 — нечётные (6 вариантов на каждую). Количество чисел Pattern A: 6 * 6^3 * 7^3 = 444{,}528.
- Pattern B (начинаем с нечётной): позиции 1,3,5,7 — нечётные (6 вариантов на первую), позиции 2,4,6 — чётные (7 вариантов на каждую). Количество чисел Pattern B: 6 * 6^3 * 7^3 = 444{,}528.
- Всего подходящих чисел по условию чередования: 889{,}056.
- Условие "не менее двух цифр 5" (т.е. хотя бы две цифры равны 5) Посчитаем через вычитание: количество с 0 пятёр минус количество с 1 пятёр и др. проще вычислить напрямую для каждых паттернов.
Pattern A:
- zero 5s: первая цифра из {2,4,6,8,10,12} (6 вариантов), каждое из трёх нечётных положений кроме 5 имеет 5 вариантов (без 5), остальные чётные позиции — по 7 вариантов. Итого: 6 * 5^3 * 7^3 = 257{,}250.
- exactly one 5: выбираем место для 5 среди трех нечётных позиций (2,4,6): 3 варианта; остальные две нечётные позиции — не 5 (5 вариантов каждая); чётные позиции — 6,7,7,7 на соответствующих местах. Итого: 3 * 5^2 * 6 * 7^3 = 154{,}350.
- значит для Pattern A: чисел с >= 2 пятёрками = 444{,}528 - (257{,}250 + 154{,}350) = 32{,}928.
Pattern B:
- zero 5s: первая цифра нечётная без 0 и без 5 — 5 вариантов; остальные три нечётные позиции без 5 — по 5 вариантов; три чётные позиции — по 7 вариантов. Итого: 5 * 5^3 * 7^3 = 214{,}375.
- exactly one 5: две подзадачи:
- 5 на позиции 1: остальные три нечётные позиции без 5 (5 вариантов каждая); чётные позиции по 7: 5^3 * 7^3 = 42{,}875.
- 5 на одной из позиций 3,5,7 (3 варианта): pos1 — нечётная без 5 (5 вариантов); оставшиеся две нечётные позиции без 5 (5 вариантов каждая); чётные позиции по 7: 5^1 * 5^2 * 7^3 = 42{,}875. Итого: 42{,}875 + 3*42{,}875 = 171{,}500.
- значит для Pattern B: чисел с >= 2 пятёрками = 444{,}528 - (214{,}375 + 171{,}500) = 58{,}653.
Общее количество чисел с не менее двумя 5-ками: 32{,}928 + 58{,}653 = 91{,}581.
Ответ: 91581.
- Пример кода на Python с использованием itertools Цель кода: посчитать такое же количество, используя перебор через две паттерны чередования.
- Вариант 1: прямой перебор по паттернам
- Вариант 2: общий перебор всех чисел с проверкой пары и количества пятёрок (но хуже по времени)
Ниже приведён рабочий пример через itertools:
from itertools import product
# Данные
even_digits = [0, 2, 4, 6, 8, 10, 12] # чётные
odd_digits = [1, 3, 5, 7, 9, 11] # нечётные
# Pattern A: start even (позиции 1,3,5,7 - чётные; 2,4,6 - нечётные)
# pos1 не может быть 0
pA = 0
for d1 in [2, 4, 6, 8, 10, 12]: # первая цифра не ноль
for d2 in odd_digits:
for d3 in even_digits:
for d4 in odd_digits:
for d5 in even_digits:
for d6 in odd_digits:
for d7 in even_digits:
seq = [d1, d2, d3, d4, d5, d6, d7]
if seq.count(5) >= 2:
pA += 1
# Pattern B: start odd (позиции 1,3,5,7 - нечётные; 2,4,6 - чётные)
pB = 0
for d1 in odd_digits: # первая цифра нечётная
for d2 in even_digits:
for d3 in odd_digits:
for d4 in even_digits:
for d5 in odd_digits:
for d6 in even_digits:
for d7 in odd_digits:
seq = [d1, d2, d3, d4, d5, d6, d7]
if seq.count(5) >= 2:
pB += 1
print(pA + pB) # должно вывести 91581
Если хотите, можно сделать и более компактный вариант, где оба паттерна задаются через product с перечислением допустимых значений по каждому месту, но результат будет тот же.
Итого: ответ равен 91 581.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



