8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Илья составляет слова перестановкой букв в слове ЕДИНОБОРСТВА. Сколько слов, в середине (то есть не начинается с первой позиции и не заканчивается последней) которых находится слово НОСБ, а в начале стоит гласная буква, может составить Илья?
Решение руками
Рассмотрим различные расположения слова НОСБ: *НОСБ*******, **НОСБ******, ***НОСБ*****, ****НОСБ****, *****НОСБ***, ******НОСБ**, *******НОСБ*. Так как на первой позиции может стоять только гласная, а одна буква О находится в слове НОСБ, то всего букв на первой позиции может стоять 4.
Тогда, например, для *НОСБ******* всего слов будет: . Так как
всего вариантов перестановок может быть 7, то умножаем это число на 7:
. Так как в
слове встречается две буквы О, то чтобы исключить повторения, нужно еще разделить это число на 2:
Решение через циклы
Составляем программу для перебора всех слов из оставшихся 8 букв, полученных удалением сочетания НОСБ из
изначального слова. Первая буква выбирается только из гласных (Е, И, О, А). Проверяем, что буквы не повторяются,
используя множество (его длина должна совпадать с длиной слова, тогда нет повторяющихся букв). Каждое слово
добавляем в множество , чтобы убрать дубликаты. Поскольку слово НОСБ может стоять в середине на 7 разных
позициях, итоговый результат умножаем на 7.
# оставляем буквы слова "ЕДИНОБОРСТВА", исключив НОСБ, # так как оно фиксировано a = "ЕДИОРТВА" count = set() # множество для уникальных слов for x1 in "ЕИОА": # первая буква - гласная for x2 in a: for x3 in a: for x4 in a: for x5 in a: for x6 in a: for x7 in a: for x8 in a: s = x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 # по условию у нас перестановки, # то есть каждая буква используется 1 раз if len(set(s)) == len(s): count.add(s) # умножаем на 7, потому что НОСБ можно расположить на 7 позиций print(len(count) * 7)
Решение через itertools
С помощью permutations строим все перестановки оставшихся 8 букв. Проверяем, что первая буква – одна из гласных.
Если условие выполнено, добавляем строку в множество. После перебора берём размер множества и умножаем на 7
(так как сочетание НОСБ может занимать 7 различных позиций).
from itertools import permutations count = set() # множество для уникальных слов # составляем перестановки оставшихся букв for x in permutations("ЕДИОРТВА"): s = "".join(x) # проверяем, что первая буква гласная if s[0] in "ЕИОА": count.add(s) # умножаем на 7, это количество перестановок для НОСБ print(len(count) * 7)
Специальные программы

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

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

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

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

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

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