Тема 8. Комбинаторика

8.01 Слова в алфавитном порядке

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела комбинаторика
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#59463

Все 6-буквенные слова, составленные из букв А,М,Б,Р, записаны в алфавитном порядке. Вот начало списка:

1. АААААА

2. АААААБ

3. АААААМ

4. АААААР

5. ААААБА

.....

Под каким номером в списке идёт последнее слово, которое содержит сочетание букв АМБАР?

Показать ответ и решение

Заменим буквы на цифры: А - 0, Б - 1, М - 2, Р - 3.

Теперь запишем 6-буквенные слова в новом алфавите.

1. 000000

2. 000001

3. 000002

4. 000003

5. 000010

.....

Полученный ряд - числа в четверичной системе счисления, записанные по возрастанию.

Последнее слово, которое содержит сочетание букв АМБАР будет выглядеть так РАМБАР в четверичной системе выглядит так — 3021034  .

Переводим в десятичную систему счисления: 3021034 = 321910  .

Но поскольку номер в списке на единицу больше самого числа, то остается добавить к получившемуся числу единицу. Получаем число 3220.

Решение через циклы
Перебираем все 6-буквенные слова из букв АБМР в алфавитном порядке, где каждый цикл отвечает за один символ. Для каждого слова проверяем, содержит ли оно подстроку АМБАР. Если условие выполняется, запоминаем его номер, и в конце получаем номер последнего подходящего слова.

s = "АБМР"  # Алфавитный порядок букв (как в примере)
n = 1  # Счётчик для нумерации слов

ans = ""  # Для номера последнего слова, содержащего подстроку АМБАР

# Генерация всех 6-буквенных слов через вложенные циклы
for x1 in s:  # 1-я буква
    for x2 in s:  # 2-я буква
        for x3 in s:  # 3-я буква
            for x4 in s:  # 4-я буква
                for x5 in s:  # 5-я буква
                    for x6 in s:  # 6-я буква
                        w = x1 + x2 + x3 + x4 + x5 + x6  # Собираем слово
                        if "АМБАР" in w:
                            # Если слово содержит подстроку АМБАР,
                            # запоминаем его номер
                            ans = n
                        n += 1  # увеличиваем счётчик
print(ans)  # выводим ответ

Решение через itertools
Для решения задачи с помощью модуля itertools воспользуемся функцией product. Она генерирует все комбинации заданной длины с повторениями из заданного алфавита. Функция product сохраняет алфавитный порядок, так как перебирает символы в том же порядке, в котором они указаны алфавите.
После составления очередного слова необходимо его проверить на содержание подстроки АМБАР. Если условие выполняется, запоминаем номер слова. В итоге сохранится номер последнего слова, содержащего АМБАР.

from itertools import product

s = "АБМР"  # Алфавитный порядок букв
n = 1  # Счётчик для нумерации слов
ans = ""  # Для номера последнего слова, содержащего подстроку АМБАР

# Генерируем все возможные 6-буквенные комбинации
for x in product(s, repeat=6):
    w = "".join(x)  # Преобразуем кортеж символов в строку
    if "АМБАР" in w:
        ans = n  # Запоминаем номер, если слово содержит подстроку АМБАР
    n += 1  # Увеличиваем счётчик на 1 для каждого нового слова
print(ans)

Ответ: 3220

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!