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

Полина составляет 6-буквенные коды из букв П,О,Л,И,Н,А. Буква Л может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой А. Все остальные буквы могут встречаться любое количество раз или не встречается совсем. Сколько различных кодов может составить Полина?

Найдем слова без буквы Л, в таком случае на каждой из шести позиций может стоять любая буква из пятибуквенного набора П,О,И,Н,А →  5⋅5 ⋅5⋅5⋅5 ⋅5 = 56 = 15625  слов.

Найдем слова с одной буквой Л; есть четыре варианта расстановки, так как эта буква не может стоять на первом и последнем месте:

* Л * * * *

* * Л * * *

* * * Л * *

* * * * Л *

Так как рядом с Л не может стоять буква А, то слева и справа от Л можно поставить только одну из четырех букв, исключая А, а на другие оставшиеся места — одну из пяти.

4 Л 4 5 5 5 → 4⋅1 ⋅4⋅5⋅5 ⋅5 = 2000

5 4 Л 4 5 5 → 5⋅4 ⋅1⋅4⋅5 ⋅5 = 2000

5 5 4 Л 4 5 → 5⋅5 ⋅4⋅1⋅4 ⋅5 = 2000

5 5 5 4 Л 4 → 5⋅5 ⋅5⋅4⋅1 ⋅4 = 2000

Итого: 15625 +2000 ⋅4  = 23625.

Решение программой (циклы):

ans = set()
alf = ’ПОЛИНА’

for x1 in alf:
    for x2 in alf:
        for x3 in alf:
            for x4 in alf:
                for x5 in alf:
                    for x6 in alf:
                        w = x1 + x2 + x3 + x4 + x5 + x6
                        if w.count(’Л’) <= 1 and w[0] != ’Л’ and w[-1] != ’Л’ and ’ЛА’ not in w and ’АЛ’ not in w:
                            ans.add(w)
print(len(ans))

Решение программой (itertools):

from itertools import product

ans = set()
alf = ’ПОЛИНА’

for w in product(alf, repeat=6):
    w = ’’.join(w)
    if w.count(’Л’) <= 1 and w[0] != ’Л’ and w[-1] != ’Л’ and ’ЛА’ not in w and ’АЛ’ not in w:
        ans.add(w)
print(len(ans))

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