8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Паша составляет 6-буквенные слова из букв слова МАШИНА так, что буквы на позициях одинаковой чётности расположены в алфавитном порядке. Сколько различных слов может составить Паша, если каждую букву можно использовать неограниченное количество раз?
Решение руками
В задаче нужно на 6 позиций букв расставить их так, чтобы на местах одинаковой чётности буквы стояли в алфавитном порядке.
В таком случае, места в слове можно разбить на 2:
1) 3 места с нечётными номерами (1, 3, 5)
2) 3 места с чётными номерами (2, 4, 6)
Тогда достаточно будет найти количество вариантов получить алфавитный порядок на местах одной из чётностей, а другой вариант будет таким же.
Для получения задачи, рассмотрим, какая буква стоит на первом месте, затем какая буква может стоять на втором месте, и тогда посчитаем количество букв, которое может стоять на последнем месте.
Составим следующую таблицу, буквы из верхней строки стоят на первом месте, буквы из левого столбца – на втором месте:
А | И | М | Н | Ш | |
А | 5 | - | - | - | - |
И | 4 | 4 | - | - | - |
М | 3 | 3 | 3 | - | - |
Н | 2 | 2 | 2 | 2 | - |
Ш | 1 | 1 | 1 | 1 | 1 |
После сложения всех чисел из таблицы, получим способов расставить буквы в алфавитном порядке.
Тогда общее количество слов получим произведением , так как нужно расставить буквы в алфавитном порядке
два раза, в итоге получим
способов, что и будет ответом.
Решение через циклы
Составим программу для перебора всех возможных 6-буквенных слов. Поскольку буквы на позициях одинаковой чётности
должны быть в алфавитном порядке, организуем 6 вложенных циклов: первые, третьи и пятые буквы – для нечётных
позиций, вторые, четвёртые и шестые – для чётных. Проверка на алфавитный порядок выполняется через сравнение s[0]
<= s[2] <= s[4] и s[1] <= s[3] <= s[5]. Python сравнивает строки по порядковым номерам символов в таблице ASCII, что
соответствует алфавитному порядку. Если условие выполнено, добавляем слово в множество для исключения
повторений.
a = "МАШИНА" # допустимые буквы count = set() # множество для подходящих слов # перебираем все 6-буквенные комбинации с повторениями for x1 in a: # 1-я буква (нечётная позиция) for x2 in a: # 2-я буква (чётная позиция) for x3 in a: # 3-я буква (нечётная позиция) for x4 in a: # 4-я буква (чётная позиция) for x5 in a: # 5-я буква (нечётная позиция) for x6 in a: # 6-я буква (чётная позиция) s = x1 + x2 + x3 + x4 + x5 + x6 # формируем слово # проверяем условие: буквы на нечётных и чётных позициях в алфавитном порядке if (s[0] <= s[2] <= s[4]) and (s[1] <= s[3] <= s[5]): count.add(s) # добавляем подходящее слово в множество print(len(count)) # выводим количество слов
Решение через itertools
Для перебора всех возможных слов удобно использовать функцию product из модуля itertools, которая строит все
6-буквенные комбинации с повторениями. После формирования строки буквы на нечётных позициях (1, 3, 5) записываем в
s1, а на чётных (2, 4, 6) – в s2. Далее проверяем, что буквы в s1 и s2 совпадают с тем порядком, который получился бы при
их сортировке, то есть стоят в алфавитном порядке. Если условие выполнено, добавляем слово в список, а в конце выводим
количество уникальных слов.
from itertools import product ans = [] # список подходящих слов for i in product("МАШИНА", repeat=6): # перебор всех 6-буквенных слов с повторениями s = "".join(i) # формируем строку s1 = s[0::2] # буквы на нечётных позициях (1,3,5) s2 = s[1::2] # буквы на чётных позициях (2,4,6) # проверяем условие: буквы на нечётных и чётных позициях в алфавитном порядке if s1 == "".join(sorted(s1)) and s2 == "".join(sorted(s2)): ans.append(s) print(len(set(ans))) # количество уникальных слов
Специальные программы

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

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

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

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

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

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