Сколько существует чисел, восьмиричная запись которых содержит 8 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом?
Решение руками
Восьмиричная система счисления содержит 8 цифр: 0,1,2,3,4,5,6,7. Четыре четных цифр и четыре нечетные цифры.
Рассмотрим два случая, когда число начинается с нечетной цифры и когда с четной:
1. Н Ч Н Ч Н Ч Н Ч, в таком случае (не забывая про то, что все цифры различны), получим чисел.
2. Ч Н Ч Н Ч Н Ч Н, тут надо помнить, что на первом месте не может стоять 0, тогда числа.
Итого: 576+432 = 1008 чисел.
Решение через циклы
chet = ’0246’
nechet = ’1357’
count = set()
# составляем слово вида ЧНЧНЧНЧН, где Ч - чётная цифра, Н - нечётная цифра
for x1 in ’246’: # число не может начинаться с 0
for x2 in nechet:
for x3 in chet:
for x4 in nechet:
for x5 in chet:
for x6 in nechet:
for x7 in chet:
for x8 in nechet:
s = x1+x2+x3+x4+x5+x6+x7+x8
if len(set(s)) == len(s): # проверка, что все цифры различные
count.add(s)
# составляем слово вида НЧНЧНЧНЧ, где Ч - чётная цифра, Н - нечётная цифра
for x1 in nechet:
for x2 in chet:
for x3 in nechet:
for x4 in chet:
for x5 in nechet:
for x6 in chet:
for x7 in nechet:
for x8 in chet:
s = x1+x2+x3+x4+x5+x6+x7+x8
if len(set(s)) == len(s):# проверка, что все цифры различные
count.add(s)
print(len(count))
Решение через itertools
from itertools import permutations
count = set()
for x in permutations(’01234567’):
s = ’’.join(x)
# проверка, что число не начинается с 0 и при этом две чётных или нечётных цифры не стоят рядом
if s[0] != ’0’ and all(int(s[i]) % 2 != int(s[i+1]) % 2 for i in range(len(s)-1)):
count.add(s)
print(len(count))