8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Мирослав составляет коды из букв, входящих в его имя. Код должен состоять из 5 букв, буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом. Код не должен начинаться с гласной буквы.
Сколько кодов может составить Мирослав?
Решение руками:
Вариант 1: 3 согласные + 2 гласные
Возможные расположения (чтобы гласные не стояли рядом и не на первом месте):
С Г С Г С
С Г С С Г
С С Г С Г
Всего 3 варианта.
Выбор 3 из 5 согласных в алфавите: . Перестановки 3 согласных:
.
Выбор 2 из 3 гласных в алфавите: . Перестановки 2 гласных:
.
Итого слов для 1 варианта: .
Вариант 2: 4 согласные + 1 гласная
Выбор 4 из 5 согласных в алфавите: .
Выбор 1 из 3 гласных в алфавите: .
Позиции для гласной (не на первом месте): 4 варианта (позиции 2-5). Перестановки согласных: .
Итого: .
Вариант 3: 5 согласных + 0 гласных
Все 5 согласных можно переставить способами.
Суммируем все полученные варианты: 1080+1440+120=2640.
Решение программой с помощью циклов:
Напишем программу для перебора всевозможных 5-буквенных слов из заданных букв. Для этого организуем
вложенных циклов (по одному на каждую позицию в слове). Каждый цикл перебирает буквы заданной строки,
формируя все возможные комбинации. Запишем количество подходящих слов.
a = "МИРОСЛАВ" # Алфавит к задаче g = "ИОА" # Гласные буквы к задаче s = "МРСЛВ" # Согласные буквы к задаче sochg = [] for i in g: # Запускаем два цикла для будущего определения отсутствия Г+Г for j in g: sochg.append(i+j) # В массив добавляем все возможные сочетания букв из списка гласных count = 0 # Счётчик подходящих слов for i in s: for j in a: for k in a: for l in a: for m in a: w = i + j + k + l + m # Формируем слово t = set(s) # counts = len([i for i in w if i in s]) # Кол-во согласных countg = len([i for i in w if i in g]) # Кол-во гласных f = len([i for i in sochg if i in w]) #Кол-во сочетаний из списка sochg - Г+Г # Если все буквы различны и согласных > гласных и нет определённых сочетаний if len(set(w)) == 5 and counts > countg and f == 0: count += 1 # Увеличим счётчик print(count) # Выводим нужное количество
Решение программой с помощью модуля itertools:
Для решения задачи с помощью модуля itertools воспользуемся функцией product. Она, переставляя буквы, генерирует все возможные слова из заданного алфавита. Запишем количество подходящих слов.
from itertools import permutations count = set() # Множество подходящих слов g = "ИОА" # Гласные буквы к задаче s = "МРСЛВ" # Согласные буквы к задаче for x in permutations("МИРОСЛАВ", r = 5): s = "".join(x) # join объединяет буквы count_sogl = len([i for i in s if i in sogl]) # Количество согласных букв в слове count_gl = len([i for i in s if i in gl]) # Количество гласных букв в слове # Проверка, что слово начинается не с гласной буквы # Что количество согласных больше чем количество гласных букв и то, что нет рядом стоящих гласных букв if s[0] not in gl and count_sogl > count_gl and all(x1+x2 not in s for x1 in gl for x2 in gl): count.add(s) # Добавим в множество print(len(count)) # Выведем нужную длину
Специальные программы

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

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

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

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

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

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