Помогите решить 8 задание в егэ
(№ 5890) (А. Бриккер) Определите количество шестизначных чисел, записанных в восьмеричной системе счисления, в которых первые две цифры меньше всех оставшихся четырёх цифр, а запись числа не содержит трёх подряд идущих чётных цифр.
Ответ: 5528
Сижу уже второй час и никак не могу понять, где я могла допустить ошибку
Мой код:
from itertools import *
s = '01234567'
k = 0
for i in product(s, repeat = 6):
a = ''.join(i)
if a[0] != '0' and len(a) == 6 and a[0] < a[2] and a[0] < a[3] and a[0] < a[4] and a[0] < a[5] and a[1] < a[2] and a[1] < a[3] and a[1] < a[4] and a[1] < a[5] and '000' not in a and '222' not in a and '444' not in a and '666' not in a:
k += 1
print(k)
Выводит: 7156
Ответы (3 шт):
Автор решения: cringe foundation
→ Ссылка
count = 0
for x in range(8**5, 8**6):
i = x
d = ''
e = ''
while i > 0:
d += str(i%8)
e += str((i%8)%2)
i //= 8
# d - реверс числа в 8ричной, e - чётности цифр реверса
A = '000' not in e
if not A:
continue
mx = max(int(d[-1]), int(d[-2]))
# mx - макс. из первых двух цифр
flag = True
for i in range(4):
if int(d[i]) <= mx:
flag = False
break
if not flag:
continue
count += 1
print(count)
Автор решения: Wals
→ Ссылка
from itertools import permutations, product
comb = list(product("01234567", repeat = 6))
c = 0
for i in comb:
if i[0]!="0":
f = 1
for j in range(2,6):
if (int(i[0]) >= int(i[j])) or (int(i[1]) >= int(i[j])):
f = 0
for h in range(4):
if int(i[h])%2 == int(i[h+1])%2 == int(i[h+2])%2 == 0:
f = 0
if f == 1:
c+=1
print(c)
Автор решения: Stanislav Volodarskiy
→ Ссылка
Ошибка в условии "запись числа не содержит трёх подряд идущих чётных цифр". Вы проверяете комбинации из трёх подряд одинаковых чисел, а они могут быть разными. Первое лишнее число в вашем решении 102232. Комбинация 022 недопустима.
Если регулярные выражения вас не пугают, можно решить задачу так:
from itertools import product
import re
c = 0
for p in product('01234567', repeat=6):
# строка из цифр
n = ''.join(p)
# настоящие числа с нуля не начинаются
if n[0] == '0':
continue
# "первые две цифры меньше всех оставшихся четырёх цифр"
if max(n[:2]) >= min(n[2:]):
continue
# "не содержит трёх подряд идущих чётных цифр"
if re.search('[0246]{3}', n) is not None:
continue
# print(n)
c += 1
print(c)