8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
МС оставляет 5-буквенные коды из букв О, М, А, Р, Г. Каждую букву нужно использовать ровно один раз, при этом нельзя ставить рядом две гласные. Сколько различных кодов может составить МС?
Решение руками
У нас в распоряжении 2 гласные и 3 согласные буквы. Чтобы соблюсти условия, нам надо расставить гласные и согласные в следующих порядках:
ГСССГ
ГССГС
ГСГСС
СГСГС
ССГСГ
СГССГ
Рассмотрим одну комбинацию: на первое место можно поставить одну из 2 гласных букв, на второе место одну из 3
согласных букв, на третье место можно поставить одну из 2 согласных букв, на четвёртое место можем
поставить последную согласную букву, на последнее место ставим оставшуюся гласную букву. В итоге,
слов. В каждой комбинации можно составить по 12 слов. Расстановок таких у нас 6. Значит,
кол-во кодов:
Решение через циклы:
Для решения задачи через циклы мы будем поэтапно формировать все 5-буквенные коды из букв "О "М "А "Р "Г"и проверять их на выполнение двух условий: все буквы различны и две гласные буквы не стоят рядом. Алгоритм реализуется следующим образом:
Сначала создаём строку a = ’ОМАРГ’, которая содержит все буквы алфавита. Создаём пустое множество count = set() для хранения уникальных кодов.
Далее используем 5 вложенных циклов for, по одному на каждую букву кода:
1. for x1 in a — выбираем первую букву кода.
2. for x2 in a, ..., for x5 in a — выбираем вторую, третью, четвёртую и пятую буквы кода соответственно.
Внутри циклов формируем строку s = x1+x2+x3+x4+x5, которая представляет текущий код.
Затем проверяем условия:
- Нет соседних гласных "АО"или "ОА"→ ’АО’ not in s and ’ОА’ not in s.
- Все буквы различны → len(set(s)) == len(s). set() — множество, оно хранит только уникальные элементы, поэтому если длина множества равна длине строки, все буквы разные.
Если условия выполнены, добавляем код в множество count.
После завершения перебора всех комбинаций выводим размер множества len(count) — это и будет количество допустимых кодов.
# Создаём строку с доступными буквами a = ’ОМАРГ’ # Создаём множество для хранения всех уникальных допустимых кодов count = set() # Перебираем первую букву кода for x1 in a: # Перебираем вторую букву кода for x2 in a: # Перебираем третью букву кода for x3 in a: # Перебираем четвёртую букву кода for x4 in a: # Перебираем пятую букву кода for x5 in a: # Формируем строку кода из выбранных букв s = x1+x2+x3+x4+x5 # Проверяем условия: # 1. Нет соседних гласных "АО" или "ОА" # 2. Все буквы различны if ’АО’ not in s and ’ОА’ not in s and len(set(s)) == len(s): # Добавляем код в множество count.add(s) # Выводим количество допустимых кодов print(len(count))
Решение через itertools:
Для решения задачи с помощью модуля itertools используем функцию permutations. Она генерирует все возможные перестановки букв без повторений. Поскольку каждая буква должна использоваться ровно один раз, дополнительная проверка на уникальность не нужна.
1. Перебираем все перестановки букв ’ОМАРГ’ с помощью for x in permutations(’ОМАРГ’).
2. Преобразуем кортеж x в строку s = ’’.join(x).
3. Проверяем условие, что соседние буквы не образуют сочетания "АО"или "ОА"→ ’АО’ not in s and ’ОА’ not in s.
4. Если условие выполнено, добавляем код в множество count.
В конце выводим len(count) — количество допустимых кодов.
from itertools import permutations # Создаём множество для хранения всех уникальных допустимых кодов count = set() # Перебираем все перестановки букв ’ОМАРГ’ for x in permutations(’ОМАРГ’): # Преобразуем кортеж в строку кода s = ’’.join(x) # Проверяем условие: соседние буквы не образуют "АО" или "ОА" if ’АО’ not in s and ’ОА’ not in s: # Добавляем код в множество count.add(s) # Выводим количество допустимых кодов print(len(count))
Специальные программы

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

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

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

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

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

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