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

8.02 Подсчет количества слов/чисел

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

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

Задача 1#85471

Мишель составляет слова путём перестановки букв своего имени и располагает их в алфавитном порядке. Под каким номером будет находиться слово ШМЕЛЬИ? (Нумерация начинается с 1).

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

Решение руками

1. Слова, начинающиеся на Е, И, Л, М: 4 ∗5! = 480  - в качестве первой буквы выбирается одна из четырех, оставшиеся можно расставить произвольно.

2. Слова, начинающиеся на Ш:

ШЕ****: 1∗4! = 24

ШИ****: 1∗4! = 24

ШЛ****: 1∗4! = 24

3. Слова, начинающиеся на ШМЕ:

ШМЕИ**: 1∗ 2! = 2

4. Слова, начинающиеся на ШМЕЛ:

ШМЕЛИ*: 1

Итого слов, стоящих до ШМЕЛЬИ, 480+ 24 +24 + 24+ 2+ 1 = 555  . Значит само слово ШМЕЛЬИ имеет номер 556 (нумерация с 1 учтена, так как счет количества слов мы начинаем с 1).

Решение программой с помощью циклов

Для решения задачи с помощью циклов мы будем перебирать все возможные 6-буквенные комбинации букв из имени "МИШЕЛЬ"в алфавитном порядке и считать только уникальные перестановки.

1. Сначала сортируем буквы имени в алфавитном порядке:

     - Это позволяет генерировать слова в алфавитном порядке при помощи вложенных циклов.

2. Организуем шесть вложенных циклов for, по одному для каждой буквы слова:

     - Каждый цикл перебирает все буквы в отсортированном списке.

     - Формируем слово s путём конкатенации букв из всех циклов.

3. Проверяем, что слово является перестановкой букв имени:

     - Используем условие len(set(s)) == len(s), чтобы убедиться, что буквы не повторяются и слово состоит из всех уникальных букв.

4. Считаем количество таких слов и проверяем, достигли ли мы нужного слова "ШМЕЛЬИ":

     - Если текущее слово совпадает с "ШМЕЛЬИ выводим значение счётчика count, который и будет номером слова.

a = sorted("МИШЕЛЬ") # Сортируем буквы имени в алфавитном порядке
count = 0 # Счётчик для нумерации перестановок

# Генерация всех 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 len(set(s)) == len(s): # Проверяем, что буквы не повторяются
                            count += 1 # Увеличиваем счётчик уникальных слов
                            if s == "ШМЕЛЬИ": # Если текущее слово — нужное
                                print(count) # Выводим его номер

Решение программой с помощью модуля itertools

Для решения задачи с помощью itertools используем функцию permutations, которая генерирует все перестановки букв имени.

1. Составляем строку s из букв имени "МИШЕЛЬ".

2. Получаем все перестановки длины 6 и сортируем их в алфавитном порядке:

     - Используем sorted(permutations(s)), чтобы получить список перестановок в алфавитном порядке.

3. Сравниваем каждую перестановку с целевым словом "ШМЕЛЬИ":

     - Преобразуем кортеж в список для удобного сравнения с паттерном.

     - Если текущая перестановка совпадает с целевым словом, выводим номер позиции и прекращаем перебор.

from itertools import permutations # Импортируем функцию permutations

s = "МИШЕЛЬ" # Буквы имени
r = sorted(permutations(s)) # Получаем все перестановки и сортируем их

pattern = [x for x in "ШМЕЛЬИ"] # Целевое слово в виде списка
position = 1 # Начальный номер позиции

# Поиск позиции целевого слова
for x in r:
    if list(x) == pattern: # Если текущая перестановка совпадает с нужным словом
        print(position) # Выводим номер слова
        break # Прекращаем поиск
    position += 1 # Увеличиваем номер позиции для следующей перестановки

Ответ: 556

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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