8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Кирилл составляет 7-буквенные коды из букв П, Р, О, С, Ь, Б, А. Каждую букву нужно использовать ровно 1 раз, при этом код не может начинаться с буквы Ь и не может содержать сочетания РОСА. Сколько различных кодов может составить Кирилл?
Решение руками
Всего у нас 7 уникальных букв, которые можно переставить 7! способами: перестановок.
Код не может начинаться с Ь. Буква Ь может занимать одну из оставшихся 6 позиций. Количество перестановок,
где Ь не на первом месте: перестановок.
Фиксируем РОСА как один блок: Тогда у нас есть блок РОСА и оставшиеся буквы: П, Б, Ь (4 элемента,
"РОСА первый, П, Б, Ь - оставшиеся три). Эти 4 элемента можно переставить перестановки. Из них часть
имеет Ь на первом месте. Если РОСА начинается с позиции 2, 3 или 4, то Ь может быть на первом месте. Количество
таких случаев:
Для РОСА на позиции 2: первая буква — Ь, остальные П, Б (2 варианта).
Для РОСА на позиции 3: первая буква — Ь, вторая — П или Б (2 варианта).
Для РОСА на позиции 4: аналогично, 2 варианта.
Итого: перестановок, где Ь на первом месте и есть РОСА. Таким образом, количество запрещённых
перестановок (с РОСА и без Ь на первом месте):
.
Из общего числа перестановок без Ь на первом месте вычитаем количество перестановок, содержащих РОСА и
удовлетворяющих всем ограничениям: .
Решение через циклы
Составим программу для перебора всех семибуквенных кодов из букв П, Р, О, С, Ь, Б, А. Для этого можно
организовать 7 вложенных циклов, где каждый цикл отвечает за одну букву, причём порядок циклов совпадает с
порядком букв слова. После формирования кода проверяем три условия: первая буква не равна Ь, все буквы
уникальны (для проверки используем all с условием w.count(i) == 1, что возвращает True, если каждая буква
встречается ровно один раз), и код не содержит последовательность РОСА. Если все условия выполнены, увеличиваем
счётчик ответа.
s = "ПРОСЬБА" # доступные буквы k = 0 # счётчик подходящих кодов for a in s: for b in s: for c in s: for d in s: for e in s: for f in s: for g in s: w = a + b + c + d + e + f + g # формируем слово # проверяем, что первая буква не Ь, все буквы уникальны и нет последовательности "РОСА" if a != "Ь" and all(w.count(i) == 1 for i in w) and "РОСА" not in w: k += 1 # увеличиваем счётчик print(k) # выводим количество кодов
Решение через itertools
Для перебора всех семибуквенных комбинаций удобно использовать функцию permutations из модуля itertools, которая
строит перестановки, при чём каждый символ заданной строки используется по одному разу. После формирования
слова преобразуем кортеж в строку, проверяем, что первая буква не Ь и что строка не содержит РОСА. Если все
условия выполнены, увеличиваем счётчик ответа.
from itertools import permutations count = set() # множество подходящих кодов for x in permutations("ПРОСЬБА"): # перебираем все перестановки s = "".join(x) # формируем строку из кортежа if s[0] != "Ь" and "РОСА" not in s: # проверяем условия count.add(s) # добавляем подходящее слово в множество print(len(count)) # количество подходящих кодов
Специальные программы

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

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

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

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

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

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