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

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

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

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

Задача 1#85065

АЛЕКСЕЙ из букв своего имени составил алфавит для генерации шестибуквенных слов. Буквы в слова могут входить любое количество раз, либо не входить совсем. Все слова записали в алфавитном порядке и пронумеровали с 1. На каком месте будет стоять слово КСЕЛЕА ?

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

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

Запишем буквы в алфавитном порядке: А, Е, К, Л, С, Й и пронумеруем от 0 до 5.

А - 0, Е - 1, Й - 2, К - 3, Л - 4, С - 5.

Тогда слово КСЕЛЕА имеет вид 3514106 = 3017410  . То есть слово КСЕЛЕА стоит на 30174+ 1 = 30175  месте.

Идея решения через циклы:

Мы формируем алфавит из букв имени АЛЕКСЕЙ и упорядочиваем его в алфавитном порядке. Для генерации всех возможных шестибуквенных слов используем 6 вложенных циклов for, каждый из которых перебирает буквы алфавита. На каждом уровне цикла формируется отдельная буква слова, а сочетание этих букв в порядке вложенных циклов создаёт новое слово. После генерации каждого слова мы увеличиваем счётчик count на 1 и сравниваем полученное слово с целевым словом "КСЕЛЕА". Когда совпадение найдено, выводим значение счётчика, которое соответствует порядковому номеру слова в алфавитном списке.

Решение через циклы:

# Формируем алфавит из букв имени АЛЕКСЕЙ и сортируем его в алфавитном порядке
a = "".join(sorted(set("АЛЕКСЕЙ")))

# Инициализируем счётчик для нумерации слов
count = 0

# Генерация всех 6-буквенных слов через 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
                        # Увеличиваем счётчик, так как сформировано новое слово
                        count += 1
                        # Проверяем, совпадает ли текущее слово с "КСЕЛЕА"
                        if s == "КСЕЛЕА":
                            # Выводим номер слова в списке
                            print(count)
                            # Прерываем внутренний цикл после нахождения слова
                            break

Идея решения через itertools:

Мы используем модуль itertools и функцию product для генерации всех возможных комбинаций длины 6 из букв алфавита. Каждая комбинация возвращается в виде кортежа символов, который преобразуем в строку с помощью join. После генерации каждой строки увеличиваем счётчик count на 1 и сравниваем слово с целевым словом "КСЕЛЕА". Когда совпадение найдено, выводим значение счётчика — это и есть порядковый номер слова в алфавитном списке.

Решение через itertools:

# Импортируем функцию product из модуля itertools
from itertools import product

# Формируем алфавит из букв имени АЛЕКСЕЙ и сортируем его
a = "".join(sorted(set("АЛЕКСЕЙ")))

# Инициализируем счётчик для нумерации слов
count = 0

# Генерация всех комбинаций длины 6
for x in product(a, repeat = 6):
    # Преобразуем кортеж символов в строку
    s = "".join(x)
    # Увеличиваем счётчик для каждого нового слова
    count += 1
    # Проверяем, совпадает ли текущее слово с "КСЕЛЕА"
    if s == "КСЕЛЕА":
        # Выводим номер слова и завершаем цикл
        print(count)
        break

Ответ: 30175

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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