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

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

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

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

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

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

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