Друг составляет пятизначные числа, используя цифры от до
включительно. Цифры в числе могут использоваться только один раз или не использоваться совсем. Число начинается с цифры
. Сколько различных чисел, имеющих ровно три подряд идущие четные цифры, друг может составить?
Решение руками
Первой цифрой числа является , она нечётная. Значит либо на
,
и
месте в слове должны стоять чётные цифры, либо на
,
и
, всего
варианта. Изначально у нас есть
четных цифр, после того, как мы поставим любую из них, на второе место мы сможем поставить лишь одну из
оставшихся цифр,а на третье — одну из
оставшихся. В обоих случаях мы используем
цифры, тогда на последнее оставшееся место в числе можно поставить любую из
оставшихся нечетных цифр. Значит друг может составить
различных чисел.
Решение через циклы
a = ’0123456789’ # наше слово
chet = ’02468’ # чётные цифры
# комбинации, из которых одна точно должна быть в подходящем слове
done = [x1+x2+x3 for x1 in chet for x2 in chet for x3 in chet]
# комбинации, из которых ни одна не должна быть в подходящем слове, так как нас интересуют слова, где идут подряд ровно 3 чётные цифры
lock = [x1+x2+x3+x4 for x1 in chet for x2 in chet for x3 in chet for x4 in chet]
count = 0
# переборы букв слова
for x1 in a:
for x2 in a:
for x3 in a:
for x4 in a:
for x5 in a:
s = x1+x2+x3+x4+x5
if s[0] == ’5’ and len(set(s)) == len(s): # проверка, что число начинается с 5 и каждая цифра встречается единожды
# проверка, что есть в слове тройка подряд идущих чётных цифр и нет при этом чётверки подряд идущих цифр
if any(word in s for word in done) and all(word not in s for word in lock):
count += 1
print(count)
Решение через itertools
from itertools import permutations
chet = ’02468’ # чётные цифры
done = [x1+x2+x3 for x1 in chet for x2 in chet for x3 in chet]
# комбинации, из которых ни одна не должна быть в подходящем слове, так как нас интересуют слова, где идут подряд ровно 3 чётные цифры
lock = [x1+x2+x3+x4 for x1 in chet for x2 in chet for x3 in chet for x4 in chet]
count = 0
for x in permutations(’0123456789’,r = 5): # перебор слов
s = ’’.join(x)
if s[0] == ’5’:# проверка, что число начинается с 5
# проверка, что есть в слове тройка подряд идущих чётных цифр и нет при этом чётверки подряд идущих цифр
if any(word in s for word in done) and all(word not in s for word in lock):
count += 1
print(count)