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

Кирилл составляет 7-буквенные слова из букв У, С, Л, О, В, И, Е. Каждая буква может встречаться ровно один раз. При этом в слове не могут стоять рядом две согласные буквы, буква И не может стоять на первом месте, а буква О не может стоять на последнем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная.

Сколько слов может составить Кирилл?

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

s = ’УСЛОВИЕ’
sogl = ’СЛВ’
n = 0
sochg = []
for i in sogl: #запускаем два цикла для будущего определения отсутствия СОГЛ+СОГЛ
    for j in sogl:
        sochg.append(i+j) #в массив добавляем все возможные сочетания букв из списка согласных
for z in s:
    for x in s:
        for c in s:
            for v in s:
                for b in s:
                    for m in s:
                        for a in s:
                            slovo = z+x+c+v+b+m+a
                            f = len([i for i in sochg if i in slovo]) #кол-во сочетаний из списка sochg - СОГЛ+СОГЛ
                            #*
                            if f == 0 and slovo[-1]!= ’О’ and slovo[0] != ’И’ and all(slovo.count(i) == 1 for i in s):
                                n += 1
print(n)

#*
#f == 0: в словах отсутствуют комбинации вида СОГЛ+СОГЛ
#slovo[-1] != ’О’: последняя буква слова не является О
#slovo[0] != ’И’: первая буква не является И
#all(slovo.count(i) == 1 for i in s): каждая буква повторяется в слове ровно один раз

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

from itertools import permutations

count = set()
sogl = ’СЛВ’ # согласные буквы слова
for x in permutations(’УСЛОВИЕ’):
    s = ’’.join(x)
    # проверка, что слово не начинается на И, не заканчивается на О и нет в слове рядом стоящих согласных букв
    if s[0] != ’И’ and s[-1] != ’О’ and all(x1+x2 not in s for x1 in sogl for x2 in sogl):
        count.add(s)
print(len(count))

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