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

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

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

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

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

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

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