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

Сколько 8-буквенных слов может составить Петя из букв П, Е, Т, Я, если буква П должна использоваться менее трёх раз и при этом должна стоять рядом с Е и не может быть на последней позиции? Каждая буква может использоваться несколько раз или не использоваться совсем.

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

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:
                        for x7 in alf:
                            for x8 in alf:
                                w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8
                                if w.count(’П’) < 3 and w[-1] != ’П’:
                                    f = 1  # Переменная-флаг
                                    # Добавляем буферный символ в начало, чтобы w1[i - 1] отрабатывало корректно
                                    # для первого символа
                                    w1 = ’_’ + w
                                    for i in range(1, len(w1) - 1):
                                        if w1[i] == ’П’ and w1[i - 1] != ’Е’ and w1[i + 1] != ’Е’:
                                            f = 0
                                            break
                                    # Только если флаг остался 1
                                    if f:
                                        ans.add(w)
print(len(ans))

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

from itertools import product

ans = set()
alf = ’ПЕТЯ’

for w in product(alf, repeat=8):
    w = ’’.join(w)
    if w.count(’П’) < 3 and w[-1] != ’П’:
        f = 1  # Переменная-флаг
        # Добавляем буферный символ в начало, чтобы w1[i - 1] отрабатывало корректно
        # для первого символа
        w1 = ’_’ + w
        for i in range(1, len(w1) - 1):
            if w1[i] == ’П’ and w1[i - 1] != ’Е’ and w1[i + 1] != ’Е’:
                f = 0
                break
        # Только если флаг остался 1
        if f:
            ans.add(w)

print(len(ans))

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