8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Андрей составляет 6-буквенные коды из букв Р, О, М, А, Ш, К. Буква Ш может использоваться в коде ровно два раза, при этом она не может стоять на последнем месте и рядом с буквой М. Все остальные буквы могут встречаться любое количество раз. Сколько различных кодов может составить Андрей?
Найдем слова с двумя буквами Ш; есть 10 вариантов расстановки, так как эта буква не может стоять на последнем месте. Так как рядом с Ш не может стоять буква М, то слева и справа от Ш можно поставить только одну из четырех букв, исключая М, а на другие оставшиеся места - одну из пяти.
Ш Ш * * * * =
Ш * Ш * * * =
Ш * * Ш * * =
Ш * * * Ш * =
* Ш Ш * * * =
* Ш * Ш * * =
* Ш * * Ш * =
* * Ш Ш * * =
* * Ш * Ш * =
* * * Ш Ш * =
Итого: .
Решение программой (циклы)
Составляем программу для перебора всех 6-буквенных слов из букв РОМАШК. Для каждого слова проверяем условия:
методом count убеждаемся, что буква Ш встречается ровно два раза, с помощью индексации проверяем, что последняя
буква не Ш, с помощью оператора in исключаем подстроки ШМ и МШ. Если все условия выполнены, добавляем слово
в множество, чтобы убрать дубликаты. В конце выводим длину множества, что и будет количеством допустимых
слов.
ans = set() # множество для хранения подходящих слов alf = "РОМАШК" # допустимые буквы for x1 in alf: for x2 in alf: for x3 in alf: for x4 in alf: for x5 in alf: for x6 in alf: # задаём слово w = x1 + x2 + x3 + x4 + x5 + x6 # проверяем все условия: # 1) ровно две буквы "Ш" # 2) последняя буква не "Ш" # 3) "Ш" не стоит рядом с "М" if w.count("Ш") == 2 and w[-1] != "Ш" and "ШМ" not in w and "МШ" not in w: ans.add(w) # добавляем подходящее слово в множество print(len(ans)) # выводим количество неповторяющихся подходящих слов
Решение программой (itertools)
Для решения задачи с помощью модуля воспользуемся функцией
. Она генерирует все возможные
слова с повторениями из заданного алфавита. Это удобно, так как буквы кроме Ш могут встречаться любое
количество раз, а Ш должна встречаться ровно два раза. Остальные условия проверяются аналогично
решению с циклами. Если слово удовлетворяет всем условиям, добавляем его в множество, чтобы исключить
дубликаты.
from itertools import product ans = set() # множество для хранения подходящих слов alf = "РОМАШК" # допустимые буквы # перебираем все 6-буквенные слова с повторениями for w in product(alf, repeat=6): w = "".join(w) # преобразуем кортеж в слово # проверяем условия задачи if w.count("Ш") == 2 and w[-1] != "Ш" and "ШМ" not in w and "МШ" not in w: ans.add(w) # добавляем подходящее слово print(len(ans)) # выводим количество неповторяющихся подходящих слов
Специальные программы

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

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

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

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

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

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