8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Из букв слова Р,Е,С,Т,О,Р,А,Н, составляются 8-буквенные последовательности. Сколько можно составить различных последовательностей таких, что каждая буква используется столько же раз, сколько она встречается в слове РЕСТОРАН и они не содержат сочетание букв АТ?
Всего существует последовательностей (поделили на 2!, так как буква Р
используется в слове два раза, поэтому так мы исключаем повторения)
Найдем количество последовательнотсей с сочетанием букв АТ:
1. А Т * * * * * *
2. * А Т * * * * *
3. * * А Т * * * *
4. * * * A T * * *
5. * * * * A T * *
6. * * * * * A T *
7. * * * * * * A T
Получается есть 7 вариантов перестановок букв АТ, для каждого варианта постановки АТ существует
последовательностей, но не забываем поделить на 2!, чтобы исключить повторения из-за
двух букв Р, значит 720/2 = 360 последовательностей.
Тогда существует последовательностей, которые содержат сочетание АТ.
Значит для вычисления итогового ответа достаточно вычесть из всех последовательностей последовательности с
сочетанием букв АТ:
20160 - 2520 = 17640 последовательностей без сочетания букв АТ.
Решение программой (циклы):
Перебираем все 8-буквенные слова, составленные из букв слова РЕСТОРАН, где каждая буква встречается столько
раз, сколько в исходном слове. Для каждого слова проверяем условия: оно не содержит подстроку АТ (используем
оператор in) и количество каждой буквы совпадает с количеством в исходном слове. Для проверки второго условия
используем флаг, который обнуляется при нарушении условий. Далее проходимся по каждой букве и с помощью
метода count проверяем, что количество совпадает с количеством в исходном слове. Если слово подходит,
добавляем его в множество, чтобы исключить повторения. В конце выводим количество подходящих
последовательностей.
word = "РЕСТОРАН" # Исходное слово alf = set("РЕСТОРАН") # Уникальные буквы ans = set() # Множество для хранения неповторяющихся слов # Генерация всех 8-буквенных слов через вложенные циклы for x1 in alf: # 1-я буква for x2 in alf: # 2-я буква for x3 in alf: # 3-я буква for x4 in alf: # 4-я буква for x5 in alf: # 5-я буква for x6 in alf: # 6-я буква for x7 in alf: # 7-я буква for x8 in alf: # 8-я буква w = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 if "АТ" not in w: # Проверяем отсутствие подстроки АТ f = 1 # Флаг. 1 = слово подходит, 0 = не подходит for i in w: # Проверяем совпадение количества букв if w.count(i) != word.count(i): f = 0 # Слово не подходит break if f: # Если все условия выполнены ans.add(w) # Запоминаем подходящее слово print(len(ans)) # Выводим количество уникальных слов
Решение программой (itertools):
Для решения задачи с помощью модуля itertools используем функцию product, которая генерирует все 8-буквенные
комбинации из букв множества РЕСТОРАН. Каждое слово проверяется на отсутствие подстроки АТ и на совпадение
количества букв с исходным словом. Проверки выполняются аналогично решению с вложенными циклами. Если слово
подходит, добавляем его в множество, чтобы исключить повторения. В конце выводим количество подходящих
последовательностей.
from itertools import product word = "РЕСТОРАН" # Исходное слово alf = set("РЕСТОРАН") # Уникальные буквы ans = set() # Множество для неповторяющихся слов # Перебор всех 8-буквенных комбинаций из букв множества "РЕСТОРАН" for w in product(alf, repeat=8): w = "".join(w) # Собираем строку из кортежа if "АТ" not in w: # Проверяем отсутствие подстроки "АТ" f = 1 # Флаг. 1 = слово подходит, 0 = не подходит for i in w: # Проверяем совпадение количества букв if w.count(i) != word.count(i): f = 0 # Слово не подходит break if f: # Если все условия выполнены ans.add(w) # Запоминаем подходящее слово print(len(ans)) # Выводим количество уникальных слов
Специальные программы

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

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

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

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

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

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