Для задачи вообще не требуется программирования. Банальная комбинаторика.
Существует всего 2 варианта комбинаций чётных / нечётных цифр:
ЧНЧНЧ
НЧНЧН
При этом у нас 3 нечётные цифры (1 исключается) и 4 чётные. Но при этом на первом месте не может стоять чётная цифра 0.
НЧНЧН = (3 * 2 * 1) * (4 * 3)
ЧНЧНЧ = 3 * (3 * 2) * (3 * 2)
Ответ: (3 * 2 * 1) * (4 * 3) + 3 * (3 * 2) * (3 * 2) = 180
Но если так хочется кодом, то:
import re
cnt = 0
for i in range(8 ** 4, 8 ** 5):
s = oct(i)[2:]
cnt += len(set(s)) == 5 and not re.search(r'1|[0246]{2}|[357]{2}', s)
print(cnt)
Перебираем только пятизначные восьмеричные числа и увеличиваем cnt на 1, если восьмеричная запись очередного числа удовлетворяет условию: "все цифры различны" и НЕ удовлетворяет условию: "содержит цифру 1 или содержит 2 подряд чётные цифры или содержит 2 подряд нечётные цифры".
Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи цифру 1, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?
Почему этот код выдает неправильный ответ?
from itertools import *
k = 0
for x in product('01234567', repeat = 5):
s = ''.join(x)
if '1' not in s and len(set(s)) == 5 and s[0] != 0:
s = s.replace('2', '0').replace('4', '0').replace('6', '0')\
.replace('5', '3').replace('7', '3').replace('1', '3')
print(s)
if '00' not in s and '33' not in s:
k += 1
print(k)