8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Арсений составляет 7-буквенные слова перестановкой букв слова ОКТЯБРЬ. При этом в слове не могут стоять рядом буквы О и Я, а буква Ь не может стоять на первом или последнем месте. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько слов может составить Арсений?
Решение руками
1. Общее количество перестановок с учётом ограничения на Ь:
Буква Ь не может стоять на первом или последнем месте. То есть для Ь доступны только позиции 2, 3, 4, 5, 6 (всего
5 вариантов). Остальные 6 букв можно расставить на оставшиеся 6 позиций произвольно. Таким образом, получаем
слов.
2. Подсчет слов с ОЯ или ЯО:
Заменим сочетание ОЯ или ЯО одной буквой - Y. Тогда набор букв: Y, К, Т, Р, Б, Ь и длина слова - 6. Ь нельзя
разместить на первом или последнем месте, значит для него доступно 4 варианта. Остальные 5 букв можно расставить
на оставшиеся 5 позиций произвольно. Таким образом, получаем . Учтем, что Y означает две комбинации
букв:
.
3. Тогда подходящих под условие слов: .
Решение через циклы:
Для решения задачи через циклы мы будем формировать все возможные 7-буквенные слова, которые являются перестановками букв слова "ОКТЯБРЬ". Каждая позиция слова соответствует отдельному циклу for, где выбирается одна буква.
Сначала создаём строку a = ’ОКТЯБРЬ’ для всех букв и строку a1 = ’ОКТЯБР’ для первой и последней позиции, так как буква ’Ь’ не может стоять на этих местах. Создаём пустое множество count = set() для хранения уникальных слов.
Далее используем 7 вложенных циклов for:
1. for x1 in a1 — выбираем первую букву слова (не ’Ь’).
2. for x2 in a, ..., for x6 in a — выбираем буквы со 2-й по 6-ю позицию (любые буквы).
3. for x7 in a1 — выбираем последнюю букву слова (не ’Ь’).
Внутри циклов формируем строку s = x1+x2+x3+x4+x5+x6+x7.
Затем проверяем условия задачи:
- Буквы ’О’ и ’Я’ не стоят рядом: ’ОЯ’ not in s and ’ЯО’ not in s. - Все буквы различны: len(set(s)) == len(s).
Если оба условия выполнены, добавляем слово в множество count. После завершения перебора всех комбинаций выводим размер множества len(count) — это количество допустимых слов.
# Строка с буквами исходного слова a = ’ОКТЯБРЬ’ # Строка для первой и последней позиции (без буквы ’Ь’) a1 = ’ОКТЯБР’ # Множество для хранения уникальных слов count = set() # Перебор буквы на первой позиции (не ’Ь’) for x1 in a1: # Перебор буквы на второй позиции for x2 in a: # Перебор буквы на третьей позиции for x3 in a: # Перебор буквы на четвёртой позиции for x4 in a: # Перебор буквы на пятой позиции for x5 in a: # Перебор буквы на шестой позиции for x6 in a: # Перебор буквы на последней позиции (не ’Ь’) for x7 in a1: # Формируем текущее слово s = x1+x2+x3+x4+x5+x6+x7 # Проверяем условия: # 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. Перебираем каждую перестановку x и преобразуем её в строку s = ’’.join(x).
2. Проверяем, что буква ’Ь’ не стоит на первой и последней позиции: s[0] != ’Ь’ and s[-1] != ’Ь’.
3. Проверяем, что буквы ’О’ и ’Я’ не стоят рядом: ’ОЯ’ not in s and ’ЯО’ not in s.
4. Если условия выполнены, увеличиваем счётчик count на 1.
В конце выводим count — это количество допустимых слов.
from itertools import permutations # Счётчик допустимых слов count = 0 # Перебор всех перестановок букв слова ’ОКТЯБРЬ’ for x in permutations(’ОКТЯБРЬ’): # Преобразуем кортеж в строку s = ’’.join(x) # Проверяем условия: # 1. Буква ’Ь’ не на первой и последней позиции # 2. Буквы ’О’ и ’Я’ не стоят рядом if s[0] != ’Ь’ and s[-1] != ’Ь’ and (’ОЯ’ not in s) and (’ЯО’ not in s): # Увеличиваем счётчик допустимых слов count += 1 # Выводим результат print(count)
Специальные программы

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

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

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

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

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

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