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

Мирослав составляет коды из букв, входящих в его имя. Код должен состоять из 5 букв, буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом. Код не должен начинаться с гласной буквы.

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

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

a = ’МИРОСЛАВ’
g = ’ИОА’
s = ’МРСЛВ’
sochg = []
for i in g: #запускаем два цикла для будущего определения отсутствия Г+Г
    for j in g:
        sochg.append(i+j) #в массив добавляем все возможные сочетания букв из списка гласных
count = 0
for i in s:
    for j in a:
        for k in a:
            for l in a:
                for m in a:
                    w = i+j+k+l+m
                    t = set(s)
                    counts = len([i for i in w if i in s])
#кол-во согласных
                    countg = len([i for i in w if i in g])
#кол-во гласных
                    f = len([i for i in sochg if i in w])
#кол-во сочетаний из списка sochg - Г+Г
                    if len(set(w)) == 5 and counts > countg and f == 0:
                        count += 1
print(count)

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

from itertools import permutations

count = set()
gl = ’ИОА’ # гласные буквы слова
sogl = ’МРСЛВ’ # согласные буквы слова
for x in permutations(’МИРОСЛАВ’,r = 5):
    s = ’’.join(x)
    count_sogl = len([i for i in s if i in sogl]) # количество согласных букв в слове
    count_gl = len([i for i in s if i in gl]) # количество гласных букв в слове
    # проверка, что слово начинается не с гласной буквы, также, что количество согласных больше чем количество гласных букв и то, что нет рядом стоящих гласных букв
    if s[0] not in gl and count_sogl > count_gl and all(x1+x2 not in s for x1 in gl for x2 in gl):
        count.add(s)
print(len(count))

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