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

Илья составляет слова перестановкой букв в слове ЕДИНОБОРСТВА. Сколько слов, в середине (то есть не начинается с первой позиции и не заканчивается последней) которых находится слово НОСБ, а в начале стоит гласная буква, может составить Илья?

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

Рассмотрим различные расположения слова НОСБ: *НОСБ*******, **НОСБ******, ***НОСБ*****, ****НОСБ****, *****НОСБ***, ******НОСБ**, *******НОСБ*. Так как на первой позиции может стоять только гласная, а одна буква О находится в слове НОСБ, то всего букв на первой позиции может стоять 4.

Тогда, например, для *НОСБ******* всего слов будет: 4 ⋅1⋅2⋅1 ⋅1⋅7⋅6 ⋅5⋅4⋅3 ⋅2⋅1 = 40320  . Так как всего вариантов перестановок может быть 7, то умножаем это число на 7: 40320 ⋅7 = 282240  . Так как в слове встречается две буквы О, то чтобы исключить повторения, нужно еще разделить это число на 2: 282240 ---2-- = 141120

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

#Исключаем НОСБ из слова, считая, по умолчанию, что оно находится в середине слова. Всего 7 вариантов, где НОСБ не находится по краям слова, по этой причине окончательный ответ нужно умножить на 7
a = ’ЕДИОРТВА’

count = set()

for x1 in ’ЕИОА’:
    for x2 in a:
        for x3 in a:
            for x4 in a:
                for x5 in a:
                    for x6 in a:
                        for x7 in a:
                            for x8 in a:
                                s = x1+x2+x3+x4+x5+x6+x7+x8
                                if len(set(s)) == len(s):
                                    count.add(s)
print(len(count)*7)

Решение через itertools

from itertools import permutations

count = set()
#Исключаем НОСБ из слова, считая, по умолчанию, что оно находится в середине слова. Всего 7 вариантов, где НОСБ не находится по краям слова, по этой причине окончательный ответ нужно умножить на 7
for x in permutations(’ЕДИОРТВА’):
    s = ’’.join(x)
    if s[0] in ’ЕИОА’:
        count.add(s)
print(len(count)*7)

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