8.02 Подсчет количества слов/чисел
Ошибка.
Попробуйте повторить позже
Арез составляет шестибуквенные слова из букв слова НАКОВАЛЬНЯ. Каждая буква может встречаться в слове только один раз, на первом месте не может стоять буква Ь, а буква Л может стоять только в окружении гласных. Сколько слов может составить Арез?
Решение руками
Буква Л может стоять только на позициях 2, 3, 4, 5, так как ей нужны соседи-гласные.
1. Л на 2-й позиции: Структура слова: _ Л _ _ _ _.
Гласные: позиции 1 (слева от Л) и 3 (справа от Л). Количество способов выбрать гласные для позиций 1 и 3:
.
Остаются позиции 4, 5, 6, которые нужно заполнить из оставшихся 5 букв (исключая уже использованные гласные).
Общее количество перестановок для позиций 4, 5, 6: .
2. Л на 3-й позиции: Структура: _ _ Л _ _ _.
Гласные: позиции 2 и 4. Количество способов выбрать гласные: .
Остаются позиции 1, 5, 6, которые заполняются из 5 букв. Всего перестановок для 1, 5, 6: .
Запрещённые случаи (когда Ь на 1-й позиции): фиксируем Ь на 1-й, остальные 2 буквы выбираем из 4:
.
Допустимые перестановки: . Тогда итоговое количество слов для варианта:
слов.
Аналогично этой позиции вычисляются и Л на 4-й позиции _ _ _ Л _ _ и Л на 5-й позиции _ _ _ _ Л _.
Итог для слов с Л: слов.
Слова без Л: выбираем 6 букв из Н, А, К, О, В, Ь, Я (7 букв), учитывая, что Ь не может быть на первом месте:
.
Общее количество допустимых слов: .
Идея решения через циклы:
Мы формируем все возможные шестибуквенные слова из букв слова "НАКОВАЛЬНЯ учитывая ограничения:
1. Каждая буква может встречаться только один раз.
2. На первом месте не может стоять буква "Ь".
3. Буква "Л"может встречать только в окружении гласных букв.
Для этого мы используем шесть вложенных циклов for, каждый перебирает буквы исходного слова. После формирования слова проверяем:
- что все буквы встречаются только один раз с помощью all(s.count(i) == 1 for i in s);
- если буква "Л"присутствует, проверяем наличие хотя бы одной комбинации "гласная-Л-гласная иначе слово недопустимо;
- если буквы "Л"нет, слово сразу добавляется в множество count, чтобы не было дубликатов.
Решение через циклы:
a = "НАКОВАЛЬНЯ" # Исходное слово count = set() # Множество для хранения допустимых слов gl = "АОЯ" # Гласные буквы слова # Генерируем все комбинации, в которых буква "Л" окружена гласными m = [x1 + "Л" + x2 for x1 in gl for x2 in gl] # Перебор всех позиций слова через вложенные циклы for x1 in "НАКОВАЛНЯ": # 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 all(s.count(i) == 1 for i in s): if "Л" in s: # Проверка наличия хотя бы одной допустимой комбинации Л if any(i in s for i in m): count.add(s) # Добавляем слово в множество else: count.add(s) # Добавляем слово без Л print(len(count)) # Вывод количества допустимых слов
Идея решения через itertools:
Для более компактного решения используем модуль itertools и функцию permutations, которая генерирует все перестановки длины 6 из множества букв. Каждое слово проверяем:
- первая буква не может быть "Ь"или "Л последняя буква не может быть "Л";
- каждая буква "Л"внутри слова должна быть окружена гласными;
- если слово проходит проверки, увеличиваем счётчик cnt.
Решение через itertools:
from itertools import permutations # Импортируем функцию permutations s = set("НАКОВАЛЬНЯ") # Множество букв исходного слова gl = "АОЯ" # Множество гласных букв cnt = 0 # Счётчик допустимых слов # Перебор всех перестановок длины 6 for i in permutations(s, 6): i = "".join(i) # Преобразуем кортеж в строку # Проверка первой и последней буквы на недопустимые значения if i[0] == "Ь" or i[0] == "Л" or i[-1] == "Л": continue flag = True # Флаг для проверки правил буквы "Л" внутри слова # Проверка каждой буквы "Л", кроме крайних позиций for j in range(1, len(i) - 1): if i[j] == "Л": if not (i[j - 1] in gl and i[j + 1] in gl): flag = False # Нарушение правил для "Л" break if flag: cnt += 1 # Увеличиваем счётчик допустимых слов print(cnt) # Вывод количества допустимых слов
Специальные программы

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

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

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

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

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

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