В этой статье мы разберём все типы задач №8, шаг за шагом.
Вы не только поймёте, как решать, но и почему именно так, а не иначе.
📚 Часть 1: Теоретическая основа
🔹 Что такое задание 8?
Задание 8 проверяет умение:
- генерировать все возможные комбинации символов или цифр,
- фильтровать их по заданным условиям,
- правильно интерпретировать результат (слово, число, код).
Есть два больших типа:
- Комбинации с повторениями — когда символы могут использоваться многократно (например, «слова из 5 букв, где буквы могут повторяться»).
- Перестановки без повторений — когда символы используются ровно один раз (например, «перестановки букв слова ВОРОТА»).
Эти типы требуют разных инструментов в Python.
🔹 itertools.product
🔹itertools.permutations
✅ itertools.product — для комбинаций с повторениями
Результат:
Ключевое: символы могут повторяться, порядок важен, длина фиксирована.
Используется, когда в условии сказано:«буквы могут встречаться несколько раз»,
«цифры могут повторяться»,
«код состоит из 5 символов из набора...».
✅ itertools.permutations — для перестановок без повторений
Результат:
Ключевое: каждая буква используется ровно один раз, длина = длине исходного слова.
Используется, когда в условии например: «составить слова из букв слова ВОРОТА»,
«переставить буквы»,
«код без повторяющихся символов».
⚠️ Ловушка: в слове ВОРОТА есть повторяющиеся буквы (O дважды).
Поэтому нужно использовать set(permutations(...)), чтобы убрать дубликаты.
🔹 Почему join() — обязательный элемент?
Функции product и permutations возвращают кортежи:
Чтобы превратить это в строку 'ABC', нужно объединить символы:
Без join() вы не сможете: проверить первую/последнюю букву (s[0], s[-1]),
искать подстроки, проверять наличие символов.
🔹 Зачем in и not in?
Эти операторы позволяют проверять условия:
- 'K' in s — в слове есть буква K,
- '0' not in s — в числе нет нуля,
- 'OA' not in s — сочетание OA не встречается.
Они работают напрямую со строками, поэтому после join() — идеальны.
🔹 Как работают all() и any()?
Эти функции применяются к спискам логических значений.
any(условия) — хотя бы одно условие истинно.
Используется, когда нужно проверить:
«Есть ли хотя бы одно запрещённое сочетание?»
all(условия) — все условия истинны.
Используется, когда нужно проверить:
«Все пары соседних символов удовлетворяют правилу?»
💡 В задачах на запрет сочетаний ('OA' not in s) часто используется all() с генератором:
🔹 Почему нельзя начинать число с нуля?
Число не может начинаться с нуля.
0123 — это не четырёхзначное число, а трёхзначное 123.
Поэтому в задачах на числа всегда добавляется условие:
⚠️ В задачах на слова или коды — ноль в начале разрешён, если он входит в алфавит.
🔹 Ловушка: «не все буквы из условия используются в списке»
В задачах на списки (например, «все 5-буквенные слова записаны в алфавитном порядке») часто даётся пример начала списка:
Из этого нельзя автоматически заключить, что алфавит — только B, E, K.
Нужно читать условие внимательно: в задаче может быть написано
«Слова составлены из букв B, E, K, H, O».
А в списке просто ранние слова — они начинаются с B, потому что B — первая буква алфавита.
❗ Это классическая ловушка: мы считаем, что алфавит = B, E, K, и получаем неверный ответ.
📌 Часть 2: Разбор всех прототипов
✅ Задача 1
Игорь составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. В качестве кодовых слов Игорь использует трёхбуквенные слова, в которых могут быть только буквы Ш, К, О, Л, А, причём буква К появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько различных кодовых слов может использовать Игорь?
Решение:
Почему product?
Потому что буквы могут повторяться (кроме условия на К).
Длина фиксирована — 3.
Алфавит дан явно — 'ШКОЛА'.
Ответ: 48
✅ Задача 2
Иннокентий составляет семибуквенные слова из букв Е, И, Й, К, Н, О, Т. Каждая из допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько слов может составить Иннокентий, если известно, что в каждом из них есть комбинация КОТ?
Важно: 'КОТ' in s ищет именно эту последовательность подряд.
Это эквивалентно ручному поиску по позициям, но короче.
Ответ: 11984
✅ Задача 3
Сколько слов длины 4, начинающихся с согласной буквы и заканчивающихся гласной буквой, можно составить из букв М, Е, Т, Р, О? Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка.
Почему s[0] in 'МТР'?
Это короткая запись условия «первая буква — одна из согласных».
Аналогично для последней.
Ответ: 150
✅ Задача 4
Определите количество шестизначных чисел в пятеричной системе счисления, которые не оканчиваются цифрами 3 и 4 и не начинаются с цифры 1.
Ключевые моменты:s[0] == '0' — отсеиваем числа с незначащими нулями. Такие запрещены,
s[0] == '1' — запрет из условия,
s[-1] in '34' — запрет на последние цифры.
Ответ: 5625
✅ Задача 5
Ярослав составляет коды из букв, входящих в слово ЯРОСЛАВ. Код должен состоять из 5 букв, буквы в коде не должны повторяться, согласных в коде должно быть больше, чем гласных, две гласные буквы нельзя ставить рядом.
Сколько кодов может составить Ярослав?
Почему set(permutations(...))?
Потому что в «АРОСЛАВ» две буквы «А» — без set будут дубликаты.
Почему all?
Проверяем ВСЕ запрещённые пары. Если хотя бы одна запрещённая пара есть — слово отбрасывается.
Ответ: 1224
Запись на занятия здесь: https://t.me/nka39
✅ Задача 6
Определите количество шестизначных чисел, записанных в шестеричной системе счисления, в записи которых ровно одна цифра 2, при этом никакая нечётная цифра не стоит рядом с цифрой 2.
Проверяем четыре условия: s[0] != '0' — число не начинается с нуля (иначе — не шестизначное);
s.count('2') == 1 — цифра '2' встречается ровно один раз;
all(i + '2' not in s for i in s1) — ни одна нечётная цифра не стоит слева от 2, т.е. подстроки '12', '32', '52' отсутствуют;
all('2' + i not in s for i in s1) — ни одна нечётная цифра не стоит справа от 2, т.е. подстроки '21', '23', '25' отсутствуют.
⚠️ Важно: all(...) возвращает True, только если все элементы генератора дают True.
Здесь i in s1 перебирает '1', '3', '5', и для каждого проверяется, что запрещённая пара отсутствует в s.
Ответ: 3700
✅ Задача 7
Артур составляет 6-буквенные коды перестановкой букв слова ВОРОТА. При этом нельзя ставить рядом две гласные. Сколько различных кодов может составить Артур?
Ответ: 72
✅ Задача 8
Сколько существует шестнадцатеричных трёхзначных чисел, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?
Трёхзначные числа в шестнадцатеричной системе:
- не начинаются с '0',
- нет двух чётных или двух нечётных цифр подряд.
Ответ: 840
✅ Задача 9
Все пятибуквенные слова, составленные из букв В, Е, Н, О, К, записаны в алфавитном порядке и пронумерованы, начиная с 1. Начало списка выглядит так:
Под каким номером в списке идёт последнее слово, в котором буквы Н и К встречаются ровно по два раза?
алфавит = 'B', 'E', 'K', 'H', 'O', и алфавитный порядок — именно такой:
B < E < K < H < O
Что делает этот код:
- Перебирает все 5-буквенные слова в алфавитном порядке (product генерирует в лексикографическом порядке, а 'BEKHO' задаёт нужный порядок).
- Считает номер (num) каждого слова.
- Когда находит слово с ровно двумя 'H' и двумя 'K', сохраняет в массив его номер.
В конце выводит max(d) — максимальный номер, т.е. номер последнего подходящего слова.
Ответ: 2963
✅ Задача 10
Все пятибуквенные слова, составленные из букв К, О, М, П, Ь, Ю, Т, Е, Р, записаны в алфавитном порядке и пронумерованы.
Вот начало списка:
Под каким номером в списке стоит последнее слово с нечётным номером, которое не начинается с буквы Ь и содержит ровно две буквы К?
Буква Ю — реальная часть алфавита, и её наличие влияет на нумерацию слов в лексикографическом порядке.
Ответ: 58979
✅ Задача 10
Все шестибуквенные слова, в составе которых могут быть только русские буквы М, А, Р, К, С, Л записаны в алфавитном порядке и пронумерованы начиная с 1.
Ниже приведено начало списка.
Под каким последним номером идёт слово, в котором буквы К не стоят рядом с буквой С и одна буква повторяется трижды, а остальные не повторяются?
🔸 Важные замечания
- product — когда символы могут повторяться.
- permutations — когда символы используются один раз.
- Если в исходном слове есть повторяющиеся буквы — используйте set(permutations(...)).
- Для чисел всегда проверяйте: s[0] != '0'.
- В задачах на списки алфавит может быть шире, чем в примере — читайте условие внимательно!
- in и not in работают когда надо сравнить один символ сразу со многими.
- all() и any() — для проверки множественных условий.
💬 Заключение
Все задачи №8 решаются перебором с фильтрацией.
Главное — выбрать правильный инструмент (product или permutations) и точно следовать условию.
Пишите в комментариях к статье, разборы на какие задачи Вы бы хотели увидеть.
Подпишитесь на канал и научитесь решать все задания ЕГЭ по информатике!
Удачи на экзамене!
Записаться ко мне на занятия можно тут https://t.me/nka39