Задача к ЕГЭ по информатике на тему «подсчет количества слов/чисел» №9

Друг составляет пятизначные числа, используя цифры от 0  до 9  включительно. Цифры в числе могут использоваться только один раз или не использоваться совсем. Число начинается с цифры 5  . Сколько различных чисел, имеющих ровно три подряд идущие четные цифры, друг может составить?

Решение руками

Первой цифрой числа является 5  , она нечётная. Значит либо на 2  , 3  и 4  месте в слове должны стоять чётные цифры, либо на 3  , 4  и 5  , всего 2  варианта. Изначально у нас есть 5  четных цифр, после того, как мы поставим любую из них, на второе место мы сможем поставить лишь одну из  4  оставшихся цифр,а на третье — одну из 3  оставшихся. В обоих случаях мы используем 4  цифры, тогда на последнее оставшееся место в числе можно поставить любую из 4  оставшихся нечетных цифр. Значит друг может составить 2 ⋅ 5 ⋅ 4 ⋅ 3 ⋅ 4 = 480  различных чисел.

Решение через циклы

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)

Ответ: 480
Оцените статью
Я решу все!