8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Жук составляет 5-буквенные слова, в которых есть только буквы Р, У, К, А, причём в словах нет двух рядом стоящих гласных или согласных букв. Каждая из допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Жук?
Решение руками
Чтобы соблюсти условия, нам надо расставить гласные и согласные буквы в следующем порядке:
ГСГСГ либо СГСГС
Так как согласных и гласных букв у нас одинакове количество, то количество слов будет:
Решение через циклы:
Для решения задачи через циклы мы будем поэтапно формировать все 5-буквенные слова из букв ’РУКА’ и проверять условие: в слове не должно быть двух рядом стоящих гласных или согласных букв. Алгоритм реализуется следующим образом:
Сначала создаём строки для гласных gl = ’УА’ и согласных sogl = ’РК’. Создаём пустое множество count = set() для хранения уникальных слов.
Для упрощения перебора мы разделяем все слова на два вида:
1. Слова вида ГСГСГ (гласная, согласная, гласная, согласная, гласная) — перебираем все возможные комбинации, используя 5 вложенных циклов for, где каждая позиция выбирает букву из соответствующего набора (гласная или согласная). После формирования слова добавляем его в множество count.
2. Слова вида СГСГС (согласная, гласная, согласная, гласная, согласная) — аналогично формируем все комбинации с 5 вложенными циклами и добавляем в множество count.
После перебора всех вариантов выводим размер множества len(count), что и является количеством допустимых слов.
# Доступные буквы слова a = ’РУКА’ # Гласные буквы gl = ’УА’ # Согласные буквы sogl = ’РК’ # Множество для хранения уникальных слов count = set() # Перебор букв для слов вида ГСГСГ for x1 in gl: for x2 in sogl: for x3 in gl: for x4 in sogl: for x5 in gl: # Формируем слово из выбранных букв s = x1+x2+x3+x4+x5 # Добавляем слово в множество count.add(s) # Перебор букв для слов вида СГСГС for x1 in sogl: for x2 in gl: for x3 in sogl: for x4 in gl: for x5 in sogl: # Формируем слово из выбранных букв s = x1+x2+x3+x4+x5 # Добавляем слово в множество count.add(s) # Выводим количество допустимых слов print(len(count))
Решение через itertools:
Для упрощения перебора используем модуль itertools и функцию product, которая генерирует декартово произведение букв, т.е. все 5-буквенные комбинации из букв ’РУКА’.
1. Преобразуем кортеж x в строку s с помощью ’’.join(x).
2. Проверяем условие, что в слове нет рядом стоящих гласных или согласных. Для этого используем функцию all и генератор: для каждой пары соседних букв сравниваем принадлежность гласным (s[i] in gl) != (s[i+1] in gl). Если результат True для всех соседних пар, слово допустимо.
3. Добавляем допустимое слово в множество count.
После перебора всех комбинаций выводим размер множества len(count).
from itertools import product # Гласные буквы gl = ’УА’ # Множество для хранения уникальных слов count = set() # Перебор всех 5-буквенных комбинаций for x in product(’РУКА’, repeat = 5): # Преобразуем кортеж в строку s = ’’.join(x) # Проверяем условие: нет рядом стоящих гласных или согласных if all((s[i] in gl) != (s[i+1] in gl) for i in range(len(s)-1)): # Добавляем слово в множество count.add(s) # Выводим количество допустимых слов print(len(count))
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!