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

Из букв слова Р,Е,С,Т,О,Р,А,Н, составляются 8-буквенные последовательности. Сколько можно составить различных последовательностей таких, что каждая буква используется столько же раз, сколько она встречается в слове РЕСТОРАН и они не содержат сочетание букв АТ?

Всего существует 8-⋅7⋅6⋅5-⋅4⋅3⋅2-⋅1= 8!=  40320-= 20160         2!          2!     2  последовательностей (поделили на 2!, так как буква Р используется в слове два раза, поэтому так мы исключаем повторения)

Найдем количество последовательнотсей с сочетанием букв АТ:

1. А Т * * * * * *

2. * А Т * * * * *

3. * * А Т * * * *

4. * * * A T * * *

5. * * * * A T * *

6. * * * * * A T *

7. * * * * * * A T

Получается есть 7 вариантов перестановок букв АТ, для каждого варианта постановки АТ существует
1 ⋅1⋅6⋅5 ⋅4⋅3⋅2 ⋅1 = 720  последовательностей, но не забываем поделить на 2!, чтобы исключить повторения из-за двух букв Р, значит 720/2 = 360 последовательностей.

Тогда существует 360 ⋅7 = 2520  последовательностей, которые содержат сочетание АТ.

Значит для вычисления итогового ответа достаточно вычесть из всех последовательностей последовательности с сочетанием букв АТ:
20160 — 2520 = 17640 последовательностей без сочетания букв АТ.

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

ans = set()
word = ’РЕСТОРАН’
alf = set(’РЕСТОРАН’)

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 ’АТ’ not in w:
                                    f = 1  # Переменная-флаг
                                    for i in w:
                                        if w.count(i) != word.count(i):
                                            f = 0
                                            break
                                    # Только если флаг остался 1
                                    if f:
                                        ans.add(w)
print(len(ans))

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

from itertools import product

word = ’РЕСТОРАН’
alf = set(’РЕСТОРАН’)

for w in product(alf, repeat=8):
    w = ’’.join(w)
    if ’АТ’ not in w:
        f = 1  # Переменная-флаг
        for i in w:
            if w.count(i) != word.count(i):
                f = 0
                break
        # Только если флаг остался 1
        if f:
            ans.add(w)
print(len(ans))

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