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

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

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

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

Задача 1#58960

При регистрации на некоторой платформе есть возможность выбрать себе логин по следующему принципу:

1) Используются только строчные и заглавные буквы латинского алфавита, а также цифры от 0 до 9 включительно;

2) Логин должен начинаться с гласной буквы;

3) Логин должен оканчиваться цифрой;

4) Логин должен состоять из 4 символов.

Какое максимальное количество логинов может быть использовано на сайте?

Примечание. В латинском алфавите 26 букв, 6 из них гласные.

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

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

Длина у логина 4, значит, нужно перемножить 4 числа, каждое из которых означает количество возможных букв на каждое место.

Первый множитель — 12(6 гласных букв, каждая может быть как строчной, так и заглавной)

Второй множитель и третий множитель — 62(26 букв, каждая может быть как строчной, так и заглавной, а также десятичные цифры)

Четвёртый множитель — 10(десятичные цифры)

Вычисляем — 12*62*62*10 = 461280

Решение через циклы
Напишем программу для перебора всех 4-символьных логинов с учётом условий: первая буква – гласная (строчная или заглавная), вторая и третья могут быть любыми буквами латинского алфавита или цифрами, четвёртая – только цифра. Для этого организуем 4 вложенных цикла, формирующих все комбинации. Каждый раз при составлении логина увеличиваем счётчик.

abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
ds = "0123456789"
k = 0  # счётчик допустимых логинов

# Перебор всех логинов по условиям
for a in "aeiouyAEIOUY":  # первая буква гласная
    for b in abc + ds:  # вторая буква - любая буква или цифра
        for c in abc + ds:  # третья буква - любая буква или цифра
            for d in ds:  # четвёртая - цифра
                k += 1  # увеличиваем счётчик
print(k)  # вывод количества допустимых логинов

Решение через itertools
Для решения с помощью модуля itertools используем функцию product, которая генерирует все комбинации заданной длины с повторениями. Первая буква берётся из строки гласных (строчных и заглавных), вторая и третья – из букв латинского алфавита и цифр, четвёртая – из цифр. В итоге все условия соблюдены за счёт правильного перебора. Каждое слово добавляется во множество, чтобы исключить дубликаты. В конце выводим количество элементов в множестве.

import string
from itertools import product

letters = string.ascii_letters  # все латинские буквы
digits = "0123456789"
count = set()  # множество для хранения уникальных логинов

# Первая буква - гласная
for x1 in product("aeiouyAEIOUY", repeat=1):
    s1 = "".join(x1)
    # Вторая и третья буквы - любые буквы или цифры
    for x2x3 in product(letters + digits, repeat=2):
        s2s3 = "".join(x2x3)
        # Четвёртая буква - цифра
        for x4 in product(digits, repeat=1):
            s4 = "".join(x4)
            count.add(s1 + s2s3 + s4)  # добавляем логин в множество
print(len(count))  # выводим количество уникальных логинов

Ответ: 461280

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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