Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 8 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
Решение руками:
Если число делится на 5, то оно оканчивается либо на 5, либо на 0.
Если число оканчивается на 5, то число имеет вид: ЧНЧНЧНЧ5, где Ч – четное число, Н – нечетное число. Кроме 5 существует 4 нечетных числа. Четных чисел в таком случае 5. Но! Важно учесть, что число не может начинаться с 0, поэтому для первого цифры числа будет не 5 вариантов. а 4.
Получаем, количество вариантов: .
Если число оканчивается на 0, то число имеет вид: НЧНЧНЧН0, где Ч – четное число, Н – нечетное число. Кроме 0 существует 4 четных числа. Нечетных чисел в таком случае 5.
Получаем, количество вариантов: .
Итоговое число слов: .
Решение прогой:
#создаем строки с вариантами цифр числа
a = ’0123456789’
a1 = ’123456789’
d5 = ’05’
ch = ’02468’
nch = ’13579’
#создаем контейнер
pairs = set()
#ввод счетчика
c = 0
for m in ch:
for n in ch:
pairs.add(m + n)
for m in nch:
for n in nch:
pairs.add(m + n)
#подчёт количества чисел
for i in a1:
for j in a:
for n in a:
for k in a:
for m in a:
for l in a:
for h in a:
for v in d5:
s = i + j + n + k + m + l + h + v
if all(s.count(i) <= 1 for i in s) and all(s.count(t) == 0 for t in pairs):
c += 1
print(c)
#различность цифр проверяет первое условие
#наличие двух рядом стоящих чётных/нечётных цифр проверяет второе условие, тут мы сначала создаём массив для таких пар, составляем их с помощью вложенных циклов, а потом проверяем условием уже при составлении числа
#проверки делимости на 5 тут нет, т.к. в качестве последней цифры либо 5, либо 0
Решение программой (itertools):
from itertools import permutations
ans = set()
alf = ’0123456789’
for w in permutations(alf, 8):
w = ’’.join(w)
if w[0] != ’0’ and w[-1] in ’05’:
f = 1
for i in range(len(w) - 1):
if int(w[i]) % 2 == int(w[i + 1]) % 2:
f = 0
break
if f:
ans.add(w)
print(len(ans))