
Комбинаторика. Перебор слов и системы счисления
Штана Альберт Игоревич
В этой статье будет разобрано задание 8.
Рассмотрим типовые задачи из восьмого задания ЕГЭ по информатике.
Данное задание относится к базовому уровню сложности.
Время выполнения задания ≈ 4 минуты.
Данное задание легко решается на Python, но если знать формулы комбинаторики и уметь их применять то аналитически можно решить и быстрее. Ссылка на теорию комбинаторики: формулы комбинаторики. Также во многих задачах, в условиях которых не говорится о необходимости преобразования чисел в другую систему счисления или о выполнении арифметических операций в различных системах счисления, можно найти аналогию с той или иной позиционной системой счисления и этим облегчить решение задачи. Для решения приведённых ниже задач необходимо уметь выполнять перевод чисел из десятичной системы счисления в любую другую и обратно.
К некоторым примерам приведено несколько способов решения задачи. Основных способов решения два: Python или применяя формулы комбинаторики и переводы чисел из одной системы счисления в другую.
Все 5-буквенные слова, составленные из букв А, О, У, записаны в алфавитном порядке. Вот начало списка:
Запишите слово, которое стоит на 240-м месте от начала списка.
Поскольку слова начинаются с букв А иих список начинается с ААААА, а далее идут слова ААААО, ААААУ, АААОА и т.д., буквы А, О, У сопоставляются цифрам: А – 0, О – 1, У – 2. В результате исходная задача сводится к следующей:
Все 5-значные числа, составленные из цифр 0, 1, 2, записаны в порядке возрастания. Вот начало списка:
Какое число стоит на 240-м месте в списке?
Чтобы определить число, стоящее в списке на 240-й позиции, нужно учесть "рассогласование" между значениями чисел и их порядковыми номерами в списке:
Тогда для определения числа, стоящего на 240-й позиции, составляется следующее соответствие:
| Порядковый номер | Значение числа |
|---|---|
| 1 | 0 |
| 240 | (240 - 1) |
Очевидно, что на 240-м месте в списке стоит десятичное число 239 (так как значение числа на 1 меньше, чем порядковый номер).
Пятиразрядная запись этого числа в троичной системе счисления определяется:

В результате, на 240-м месте в списке находится пятиразрядное троичное число 22212. Преобразуя это число к записи слова, кодируемого буквами А, О, У по правилу соответствия: A – 0, О – 1, У – 2, получается слово: УУУОУ.
Ответ: УУУОУ
Все 5-буквенные слова составленные из букв К, О, Т. Вот начало списка:
На каком месте находится слово КОТОК?
В приведённом списке после слова ТТТОК идёт слово ТТТКТ, потом ТТТКО, затем — ТТТКК и ТТОТТ. Тогда, сопоставив буквы К, О, Т цифрам: Т — 0, О — 1, К — 2, условие задачи переписывается в виде:
Все 5-значные числа составлены из цифр 0,1,2. Вот начало списка:
На каком месте списка находится число 21012?
Число 21012 записано вв троичной системе счисления. После преобразования его в десятичное:
Чтобы определить номер позиции в списке для числа 192, учитывается "рассогласование" между значениями чисел и их порядковыми номерами в списке:
Для определения номера позиции числа 192 составляется соответствие:
| Порядковый номер | Значение числа |
|---|---|
| 1 (= 5 - 4) | 5 |
| 188 (= 192 - 4) | 192 |
Очевидно, что десятичное число 192 будет стоять в списке на 188-м месте (так как значение числа на 4 больше, чем его порядковый номер).
Ответ: 188
Все трёхбуквенные слова, составленные из букв К, О, Д, Е, Р, записаны в алфавитном порядке и пронумерованы, начиная с 1. Начало списка выглядит так:
Под каким номером в списке идёт первое слово, которое начинается с буквы Д?
Ответ: 51
Сколько существует различных символьных последовательностей длины 5 в трёхбуквенном алфавите {К,О,Т}, которые содержат ровно две буквы О?
Задача подобна предыдущим, и принцип её решения во много аналогичен — "перевод" букв в цифры соответствующей системы счисления и далее работа с полученными числами.
Итого получаем 4 + 3 + 2 + 1 = 10 вариантов размещения в пятиразрядном числе двух нулей.
Возможны и иные рассуждения приводящие к такому же результату! Например: условно обозначим наши нули разными цветами. Первый — синим, второй — красным. Тогда синий ноль можно разместить в пяти разрядах — получаем 5 вариантов. И в каждом из этих пяти вариантов красный ноль можно разместить в любом из оставшихся четырёх позиций. Значит, всего получаем 5 * 4 = 20 вариантов размещения. Но теперь вспомним что на самом деле оба нуля(синий и красный) — равноправны. А значит, пары "синий – красный" и "красный – синий" — это одни и теже пары. Следовательно, каждая пара получилось что была посчитана дважды и всего вариантов размещения двух нулей у нас всё-таки 20 / 2 = 10.
Другой способ решения данной задачи — это использование формул комбинаторики.
Количество различных n-разрядных числе в системе счисления с основанием m оперделяется по формуле:
(основание системы счисления, возведённое в степень, равную числу разрядов).
Ответ: 80
Составляется таблица кодовых слов для передачи сообщений, где каждому сообщению должно быть сопоставлено отдельное кодовое слово из 4 букв. В этих кодовых словах можно использовать только пять букв: "Л", "О", "Г", "И", "К", при этом буква "Л" может быть использована ровно один раз, а все остальные буквы могут встречаться в кодовом слове сколько угодно раз (или отсутствовать). Сколько различных кодовых слов можно получить по этой таблице?
| Вариант | По позициям | Всего |
|---|---|---|
| Л*** | 1 ⋅ 4 ⋅ 4 ⋅ 4 | 64 |
| *Л** | 1 ⋅ 4 ⋅ 4 ⋅ 4 | 64 |
| **Л* | 1 ⋅ 4 ⋅ 4 ⋅ 4 | 64 |
| ***Л | 1 ⋅ 4 ⋅ 4 ⋅ 4 | 64 |
| ИТОГО | 256 |
Ответ: 256
Составляется таблица кодовых слов из 5 букв, в которых можно использовать только буквы: "К", "А", "Т", "Е", "Р". При этом буква "Р" должна быть использована хотя бы 2 раза, а остальные буквы могут встречаться сколько угодно раз или отсутствовать. Сколько можно получить различных кодовых слов?
В отличие от предыдущей задачи, буква "Р" должна встречаться не ровно какое-то количество раз, а хотя бы два раза. Это означает, что в каждом получаемом слове мы должны обеспечить две буквы "Р" обязательные, а в остальных позициях слов могут быть любые буквы, в том числе и та же буква "Р".
Вычислять количество вариантов в каждой позиции, обозначенной звёздочкой, в данном случае чуть сложнее, чем в предыдущей задаче. Если, например, мы рассматриваем два варианта — "РР*" и "*РР", то нетрудно увидеть: дополнительную букву "Р" вместо звёздочки можно использовать только один раз, иначе мы дважды посчитаем одно и то же слово. Чтобы избежать такого дублирования, вместо звёздочек, расположенных справа от обозначенных букв, мы будем подставлять все возможные буквы из числа заданных, а вместо звёздочек, расположенных слева, — на одну букву меньше. В данной задаче, например, в варианте "*Р*Р*" звёздочка справа (после обеих букв "Р") будет заменяться на 5 разных букв, а звёздочки левее любой из букв "Р" — только на 4 разные буквы (буква "Р" тут исключается).
Запишем решение в виде таблицы. При этом варианты в первой колонке таблице формируется так:
| Варианты | Кол-ва вариантов в позициях | Всего |
|---|---|---|
| PP*** | 1 ⋅ 1 ⋅ 5 ⋅ 5 ⋅ 5 | |
| Р*Р** | 1 ⋅ 4 ⋅ 1 ⋅ 5 ⋅ 5 | |
| Р**Р* | 1 ⋅ 4 ⋅ 4 ⋅ 1 ⋅ 5 | |
| Р***Р | 1 ⋅ 4 ⋅ 4 ⋅ 4 ⋅ 1 | |
| *РР** | 4 ⋅ 1 ⋅ 1 ⋅ 5 ⋅ 5 | |
| *Р*Р* | 4 ⋅ 1 ⋅ 4 ⋅ 1 ⋅ 5 | |
| *Р**Р | 4 ⋅ 1 ⋅ 4 ⋅ 4 ⋅ 1 | |
| **РР* | 4 ⋅ 4 ⋅ 1 ⋅ 1 ⋅ 5 | |
| **Р*Р | 4 ⋅ 4 ⋅ 1 ⋅ 4 ⋅ 1 | |
| ***РР | 4 ⋅ 4 ⋅ 4 ⋅ 1 ⋅ 1 |
ИТОГО: 125 + 100 + 80 + 64 + 100 + 80 + 64 + 80 + 64 + 64 = 821.
Ответ: 821
Джон составляет 4-буквенные коды из букв П, О, Л, Ю, Щ, А, Я. Каждую букву можно использовать любое количество раз, при этом код не может начинаться с буквы Щ и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Джон?
Можно найти искомое количество слов, если из общего числа возможных слов вычесть количество слов, начинающихся с Щ, и количество слов, в которых нет ни одной гласной, но при этом нужно прибавить количество слов, начинающихся с Щ и не содержащих гласные, так как это количество было вычтено дважды.
counter = 0 # переменная которая будет служить как счётчик
for a in range(7): # 1 позиция
for b in range(7): # 2 позиция
for c in range(7): # 3 позиция
for d in range(7): # 4 позиция
# отбор по условию и подсчёт 1 - Щ
# нечётные значения — согласные
# таких нечётных значений в интервале [0, 6] как раз три: {1,3,5}
if a != 1 and not ((a % 2 == 1) and (b % 2 == 1) and (c % 2 == 1) and (d % 2 == 1)):
# в первой позиции – не Щ, и не должно быть, чтобы во всех четырёх позициях оказались согласные
counter += 1 # тогда этот вариант подсчитываем
print(counter) # Выводим ответ на задачу
Ответ: 2004
Тимофей составляет 5-буквенные коды из букв Т, И, М, О, Ф, Е, Й. Буква Т должна входить в код не менее одного раза, а буква Й — не более одного раза. Сколько различных кодов может составить Тимофей?
Ответ: 8006
Женя составляет 5-буквенные слова, в которых встречаются только буквы А, Б, В, Г, причём буква А появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Женя?
Напишем программу на языке Python.
counter = 0
for x1 in 'АБВГ':
for x2 in 'АБВГ':
for x3 in 'АБВГ':
for x4 in 'АБВГ':
for x5 in 'АБВГ':
s = x1 + x2 + x3 + x4 + x5
if s.count('А') == 1:
counter += 1
print(counter)
Т.к. слова состоят из 5-ти символов, то мы формируем пять вложенных циклов! В каждом цикле перебираем все буквы, которые нам дали. Внутри циклов мы составляем само слово в переменной s. Таким образом, в переменной s "прокрутятся" все возможные комбинации. Но мы подсчитываем не все комбинации, а только те, где всего одна буква А. Важно не перепутать русские и английские буквы.
Ответ: 405
Артур составляет 5-буквенные коды из букв Е, С, А, У, Л. Каждую букву нужно использовать ровно один раз, при этом нельзя ставить рядом две гласные. Сколько различных кодов может составить Артур?
Запрограммируем решение этой задачи на Python.
counter = 0
for x1 in 'ЕСАУЛ':
for x2 in 'ЕСАУЛ':
for x3 in 'ЕСАУЛ':
for x4 in 'ЕСАУЛ':
for x5 in 'ЕСАУЛ':
s = x1 + x2 + x3 + x4 + x5
if s.count(x1) == 1 and s.count(x2) == 1 and s.count(x3) == 1 and s.count(x4) == 1 and s.count(x5) == 1:
if s.count('ЕА') == 0 and s.count('АЕ') == 0 and s.count('ЕУ') == 0 and s.count('УЕ') == 0 and s.count('АУ') == 0 and s.count('УА') == 0:
counter += 1
print(counter)
В первом условии учли, что каждая буква встречается в слове только один раз. Второе условие говорит о том, что две гласные не стоят рядом (перебрали все возможные сочетания гласных).
Ответ: 12
Петя составляет шестибуквенные слова перестановкой букв слова КАБАЛА. При этом он избегает слов с двумя подряд одинаковыми буквами. Сколько всего различных слов может составить Петя?
counter = 0
for x1 in 'КБЛА':
for x2 in 'КБЛА':
for x3 in 'КБЛА':
for x4 in 'КБЛА':
for x5 in 'КБЛА':
for x6 in 'КБЛА':
s= x1 + x2 + x3 + x4 + x5 + x6
if s.count('К') == 1 and s.count('А') == 3 and s.count('Б') == 1 and s.count('Л') == 1:
if s.count('АА') == 0:
counter += 1
print(counter)
Повторяющиеся буквы в строке, из который берём символы в циклах, всегда убираем.
Слова составляются перестановкой, значит, можно представить, что просто собирают из кубиков КАБАЛА различные слова. Следовательно, в наших словах будет ровно одна буква "К", три буквы "А", одна буква "Б" и одна буква "Л". Это программируем с помощью условия и функции .count().
Т.к. повторятся может только буква "A", то мы прописываем условие, что две буквы "А" подряд не могут находится в наших комбинациях.
Если все условия будут пройдены, то мы подсчитываем такие комбинации.
Ответ: 24
Сколько слов длины 5, начинающихся с гласной буквы, можно составить из букв Е, Г, Э? Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка.
В этой тренировочной задаче из 8 задания ЕГЭ по информатике 2025 нужно держать на контроле первую букву в слове.
counter = 0
for x1 in 'ЕГЭ':
for x2 in 'ЕГЭ':
for x3 in 'ЕГЭ':
for x4 in 'ЕГЭ':
for x5 in 'ЕГЭ':
s= x1 + x2 + x3 + x4 + x5
if x1 == 'Е' or x1 == 'Э':
counter += 1
print(counter)
Подсчитываем только те комбинации, которые начинаются с гласных букв.
Ответ: 162
Сергей составляет 6-буквенные коды из букв С, О, Л, О, В, Е, Й. Буква Й может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Е. Все остальные буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Сергей?
Эта задача примечательная тем, что буква "О" в слове "СОЛОВЕЙ" повторяется. В этом случае мы должны убрать повторение буквы из перебора.
counter = 0
for x1 in 'СОЛВЕЙ':
for x2 in 'СОЛВЕЙ':
for x3 in 'СОЛВЕЙ':
for x4 in 'СОЛВЕЙ':
for x5 in 'СОЛВЕЙ':
for x6 in 'СОЛВЕЙ':
s = x1 + x2 + x3 + x4 + x5 + x6
if s.count('Й') <= 1 and x1 != 'Й' and x6 != 'Й' and s.count('ЕЙ') == 0 and s.count('ЙЕ') == 0:
counter += 1
print(counter)
Здесь также учитываем остальные условия.
Ответ: 23625
Василий составляет 4-буквенные коды из букв Г, А, Ф, Н, И, Й. Каждую букву можно использовать любое количество раз, при этом код не может начинаться с буквы Й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий?
counter = 0
for x1 in 'ГАФНИЙ':
for x2 in 'ГАФНИЙ':
for x3 in 'ГАФНИЙ':
for x4 in 'ГАФНИЙ':
s = x1 + x2 + x3 + x4
if x1 != 'Й' and s.count('А') + s.count('И') >= 1:
counter += 1
print(counter)
Ответ: 888
Сколько существует чисел, восьмеричная запись которых содержит 7 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
counter1 = 0
counter2 = 0
for x1 in '1234567':
for x2 in '01234567':
for x3 in '01234567':
for x4 in '01234567':
for x5 in '01234567':
for x6 in '01234567':
for x7 in '01234567':
s = x1 + x2 + x3 + x4 + x5 + x6 + x7
if s.count(x1) == 1 and s.count(x2) == 1 and s.count(x3) == 1 and s.count(x4) == 1 and s.count(x5) == 1 and s.count(x6) == 1 and s.count(x7) == 1:
if int(x1) % 2 == 0 and int(x2) % 2 == 1 and int(x3) % 2 == 0 and int(x4) % 2 == 1 and int(x5) % 2 == 0 and int(x6) % 2 == 1 and int(x7) % 2 == 0:
counter1 += 1
if int(x1) % 2 == 1 and int(x2) % 2 == 0 and int(x3) % 2 == 1 and int(x4) % 2 == 0 and int(x5) % 2 == 1 and int(x6) % 2 == 0 and int(x7) % 2 == 1:
counter2 += 1
print(counter1 + counter2)
Число не может начинаться с нуля. Поэтому ноль был исключён из первого цикла.
Первое условие следит за тем, чтобы каждая цифра встречалась один раз в числе. Второе условие подсчитывает количество вариантов, когда первая цифра чётная. Второе условие следит за тем, чтобы чётность и нечётность цифр чередовалась. Третье условие, наоборот, подсчитывает варианты, когда первая цифра нечётная.
Операция % - остаток от деления. Если остаток от деления на 2 равен нулю, то число чётное. Если остаток от деления на 2 равен 1, то число нечётное.
Функция int() преобразует символ в число. Ведь мы работаем именно с символами, а не с реальными числами.
Ответ: 1008
Сколько существует четырёхзначных чисел, записанных в восьмеричной системе счисления, в записи которых ровно две одинаковые цифры, причём стоящие рядом?
counter = 0
for x1 in '1234567':
for x2 in '01234567':
for x3 in '01234567':
for x4 in '01234567':
if (x1 == x2 and x2 != x3 and x2 != x4 and x3 != x4) or (x2 == x3 and x3 != x1 and x3 != x4 and x1 != x4) or (x3 == x4 and x3 != x2 and x3 != x1 and x1 != x2):
counter += 1
print(counter)
Здесь следующий принцип составления условия. Два соседа должны быть равны. Берём одного соседа из пары, где цифры должны быть равны, и комбинируем его с другими цифрами. Пишем уже, чтобы цифры были не равны. Так же прописываем, чтобы две оставшиеся цифры также не были равны. Таким образом, перебираем все варианты.
Ответ: 882
Сколько существует различных трёхзначных чисел в шестнадцатиричной системе счисления, в записи которых цифры следуют слева направо в невозрастающем порядке?
counter = 0
for x1 in '123456789ABCDEF':
for x2 in '0123456789ABCDEF':
for x3 in '0123456789ABCDEF':
if x1 >= x2 >= x3:
counter += 1
print(counter)
Символы можно сравнивает знаками больше или меньше. Символы-цифры сравниваются, как обычные числа. Буквы сравниваются в алфавитном порядке.
Применяем этот приём и получаем ответ.
Ответ: 815
Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 7 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.
counter = 0
for x1 in '123456789':
for x2 in '0123456789':
for x3 in '0123456789':
for x4 in '0123456789':
for x5 in '0123456789':
for x6 in '0123456789':
for x7 in '05':
s = x1 + x2 + x3 + x4 + x5 + x6 + x7
if s.count(x1) == 1 and s.count(x2) == 1 and s.count(x3) == 1 and s.count(x4) == 1 and s.count(x5) == 1 and s.count(x6) == 1 and s.count(x7) == 1:
if x1 in '02468' and x2 in '13579' and x3 in '02468' and x4 in '13579' and x5 in '02468' and x6 in '13579' and x7 in '02468':
counter += 1
if x1 in '13579' and x2 in '02468' and x3 in '13579' and x4 in '02468' and x5 in '13579' and x6 in '02468' and x7 in '13579':
counter += 1
print(counter)
Перебираем 7 разрядов десятичного числа. С нуля число не может начинаться, поэтому из первого цикла удаляем ноль.
Число должно делиться на 5, значит, в последнем цикле оставляем только 0 и 5.
Все цифры различны, поэтому применяем условие, что символ x1 встречается 1 раз, символ x2 встречается 1 раз и т.д.
Фраза "две чётные и две нечётные цифры не стоят рядом" обозначает, что цифры должны чередоваться. Например, чётная, нечётная, чётная, нечётная и т.д. (или наоборот).
Направление задаёт именно первая цифра, остальные цифры выстраиваются по ней.
Проверить чётность/нечётность цифр просто, мы проверям существует ли конкретный символ в строке из чётных или нечётных цифр.
У нас два равноправных случая: когда первая цифра чётная, и когда первая цифра нечётная.
Ответ: 2880
Все 4-буквенные слова, составленные из букв А, Е, И, О записаны в алфавитном порядке и пронумерованы. Вот начало списка:
Запишите слово, стоящее на 248-м месте от начала списка.
counter = 0
for x1 in 'АЕИО':
for x2 in 'АЕИО':
for x3 in 'АЕИО':
for x4 in 'АЕИО':
s = x1 + x2 + x3 + x4
counter += 1
if counter == 248:
print(s)
Переменная k это порядковый номер слов. Мы подсчитываем все слова без какого-либо условия.
Каждая переменная x перебирает буквы, которые используются для составления слов. Важно: буквы нужно перебирать в том порядке, в котором они идут в правом столбце списка, приведенного в задаче.
Мы составляем 4 вложенных цикла, т.к. длина слов равна 4-м буквам.
В переменной s формируется каждое слово из списка. Если порядковый номер равен 248, то печатаем слово s.
Обозначим условно А - 0, Е - 1, И - 2, О - 3.
Важно: Нужно буквам присваивать цифры именно в том порядке, в котором они идут в самом правом столбце, потому что буквы могут дать в "перепутанном порядке" (например Е, А, И, О), и тогда ничего не получится.
Теперь запишем список с помощью цифр:
Получился обычный счёт в четверичной системе!! (всего используются 4 цифры: 0, 1, 2, 3). А слева нумерация показывает соответствие нашей десятичной системе. Но все числа десятичной системы в этой таблице соответствия сдвинуты на 1, ведь мы должны были начать с нуля.
Нас просят записать слово стоящее на 248, т.е. если была обычная таблица соответствия чисел десятичной системы и четверичной системы, слово стоящее на 248 месте, находилось бы на 247 (248 - 1) месте. Значит, наше искомое четверичное число соответствует 247 в десятичной системе.
Переведём число 247 в четверичную систему!

Получилось число 3313 в четверичной системе. Сделаем обратное декодирование в буквы. Таким образом, ответ будет ООЕО.
Ответ: ООЕО
Все 5-буквенные слова, составленные из букв А, Р, У, К записаны в алфавитном порядке. Вот начало списка:
Укажите номер слова УКАРА
counter = 0
for x1 in 'АКРУ':
for x2 in 'АКРУ':
for x3 in 'АКРУ':
for x4 in 'АКРУ':
for x5 in 'АКРУ':
s = x1 + x2 + x3 + x4 + x5
counter += 1
if s == 'УКАРА':
print(counter)
break
Появилось нужное слово – выводим в консоль порядковый номер.
Закодируем буквы цифрами: А - 0, К - 1, Р - 2, У - 3. Здесь как раз буквы даны не в том порядке, как они идут в самом правом столбце. Но мы должны кодировать именно в том порядке, как буквы идут в самом правом столбце.
У нас получилось четыре цифры! Значит снова можно слова превратить в таблицу соответствия между десятичной системой и четверичной системой. Но десятичная система смещена на 1 позицию.
Выписываем данное нам слово и посмотрим, какое число в четверичной системе было бы, если бы у нас были вместо слов числа в четверичной системе!
Получили число в четверичной системе 31020. Узнаем, какое число в десятичной системе соответствовало этому числу, если бы была обычная таблица соответствия. Для этого переведём число 31020 из четверичной системы в десятичную. Перевод делаем по аналогии перевода из двоичной системы в десятичную.

Но помним, что у нас нумерация идёт на 1 быстрее, нежели мы бы поставили десятичные числа, как в таблице соответствия, потому что нумерация начинается не с нуля, а с 1. Поэтому к числу 840 нужно прибавить 1, и в ответе будет 841
Ответ: 841
Все пятибуквенные слова, составленные из букв Ф, Л, А, М, И, Н, Г, О записаны в алфавитном порядке и пронумерованы.
Вот начало списка:
Определите в этом списке количество слов с нечётными номерами, которые не начинаются с буквы Н и при этом содержат в своей записи не более одной букв О.
c=0
k=0
for x1 in 'АГИЛМНОФ':
for x2 in 'АГИЛМНОФ':
for x3 in 'АГИЛМНОФ':
for x4 in 'АГИЛМНОФ':
for x5 in 'АГИЛМНОФ':
s = x1 + x2 + x3 + x4 + x5
k += 1
if k % 2 != 0 and x1 != 'Н' and s.count('О') <= 1:
c += 1
print(c)
Ловушка заключается в том, что в правом столбце буква Ф не влезла в видимую часть списка. Её нужно не забыть написать в циклы. Т.е. количество букв, которое перебирается ложно быть равно 8, как и в слове ФЛАМИНГО.
Так же здесь необычно то, что нужно найти количество комбинаций. Счётчик, который будет отвечать за ответ обозначим за c. Пусть k по-прежнему обозначает порядковый номер слов.
Здесь мы не имеем право убирать букву Н из первого цикла. Нужно именно использовать переменную x1 в условии, т.к. эта переменная отвечает за первую букву.
Ответ: 11907
Все 4-буквенные слова, в составе которых могут быть буквы Н, О, Т, К, И, записаны в алфавитном порядке и пронумерованы, начиная с 1. Ниже приведено начало списка.
Под каким номером в списке идёт первое слово, которое начинается с буквы О?
counter = 0
for x1 in 'ИКНОТ':
for x2 in 'ИКНОТ':
for x3 in 'ИКНОТ':
for x4 in 'ИКНОТ':
s = x1 + x2 + x3 + x4
counter += 1
if x1 == 'О':
print(counter)
Распечатаются разные номера слов, которые начинаются с буквы "О". Мы выбираем самый первый.
Закодируем буквы цифрами. Получилось 5 цифр (0, 1, 2, 3, 4), значит, будем работать в пятеричной системе.
Нужно найти номер первого слова, которое начинается с буквы О. Если говорить на языке пятеричных чисел, то нужно найти номер числа 3000. Мы "забиваем нулями", чтобы число было четырёхразрядное, т.к. слова 4-х буквенные. Именно нулями, потому что нужно именно первое слово найти.
Теперь, как в предыдущей задаче, переведём число 3000 из пятеричной системы в десятичную = 375.
Но опять же должны прибавить 1 к числу 375, т.к. нумерация отличается от десятичных чисел на 1 в большую сторону.
Ответ: 376
Все пятибуквенные слова, в составе которых могут быть только русские буквы Л, А, Й, М записаны в алфавитном порядке и пронумерованы начиная с 1.
Ниже переведено начало списка.
Под каким номером в списке идёт последнее слово, которое не содержит ни одной буквы М, ни одной буквы Л и не содержит букв Й, стоящих рядом?
counter = 0
maxi = 0
for x1 in 'АЙЛМ':
for x2 in 'АЙЛМ':
for x3 in 'АЙЛМ':
for x4 in 'АЙЛМ':
for x5 in 'АЙЛМ':
s = x1 + x2 + x3 + x4 + x5
counter += 1
if s.count('М') == 0 and s.count('Л') == 0 and s.count('ЙЙ') == 0:
maxi = max(maxi, counter)
print(maxi)
Чтобы найти последний номер, мы используем приём "царь горы". Это позволяет найти максимальный номер, который подходит под условие задачи.
Ответ: 274
Сколько существует восьмеричных пятизначных чисел, не содержащих в своей записи цифру 1, в которых все цифры различны и никакие две чётные или две нечётные цифры не стоят рядом?
Решим вначале аналитически, затем можно будет посмотреть наглядное(не идеальное) решение с кодом на Python.
Главное условие в задаче это то что не должно быть рядом две чётных или две нечётных цифры. Рассмотрим вероятность появления таких двух чисел. Если число начинается с чётной цифры(кроме 0), то вероятность появления каждой цифры в числе следующая:
Первая цифра: 3(2,4,6) Вторая цифра: 4(1,3,5,7) Третья цифра: 4(0,2,4,6) Четвёртая цифра: 4(1,3,5,7) Пятая цифра: 4(0,2,4,6)
Чтобы получить количество возможных таких чисел нужно перемножить все вероятности: 34444, но мы пока этого делать не будем т.к. это не всё условие задачи.
Далее наоборот посчитаем количество вероятностей цифр в числе начинающегося с нечётной цифры: 4(1,3,5,7); 4(0,2,4,6); 4(1,3,5,7); 4; 4
Далее сказано, что в числе недолжно быть цифры 1 и цифры не должны повторяться. Вычтем вероятности из двух последовательностей вероятностей, которые посчитали выше по главному условию задачи: Сначала для наглядности избавимся от единицы:
Далее последнее условие это чтобы цифры в числе не повторялись, снова отнимаем вероятности:
Вычислим количество чисел для двух вариантов:
Теперь общее, т.е. сумма этих двух и будет ответом на вопрос задачи: 108 + 72 = 180
counter = 0
for x1 in '1234567':
for x2 in '01234567':
for x3 in '01234567':
for x4 in '01234567':
for x5 in '01234567':
s = x1 + x2 + x3 + x4 + x5
if s.count('1') == 0:
if (s.count(x1) == 1 and s.count(x2) == 1 and s.count(x3) == 1
and s.count(x4) == 1 and s.count(x5) == 1):
if x1 in '246' and x2 in '1357' and x3 in '0246' and x4 in '1357' and x5 in '0246':
counter += 1
elif x1 in '1357' and x2 in '0246' and x3 in '1357' and x4 in '0246' and x5 in '1357':
counter += 1
print(counter)
Ответ: 180
Определите количество 12-ричных пятиразрядных чисел, в записи которых ровно одна цифра 7 и не более трёх цифр с числовых значением, превышающим 8.
Итак, речь идёт об определении количества пятиразрядных двенадцатеричных чисел удовлетворяющих двум условиям. Рассмотрим первое условие когда в записи ровно одна цифра 7, т.е. появляется в числе только 1 раз: 7****, *7***, **7**, ***7*, ****7 и далее просчитаем вероятности появления числа со вторым условием с учётом каждого случая для первого условия: 7**** = 1 * 11 * 11 * 11 * 11 = 14641.
Это количество чисел с первой цифрой 7 вначале числа, от этого количества необходимо отнять количество вариантов числа в котором будет более 3 чисел со значением превышающим 8. Количество таких цифр 3 (9, A, B) и количество мест в которых они могут появиться = 4. Получается из формул комбинаторики следует использовать формулу - размещение с повторениями:
Объяснение формулы следующее: пусть имеется исходное множество из различных элементов, из которого требуется выбрать k элементов и расставлять их на n места, так что каждый элемент может использоваться несколько раз. Применим эту формулу:
Вычислим окончательное количество вариантов числа с учётом первого случая для обоих условий задачи: 7**** = 1 * 11 * 11 *11 * 11 = 14641 - 81 = 14560 вариантов когда число 7 встречается первой цифрой 1 раз в пятизначном двенадцатеричном числе и также в этом же числе не более трёх цифр с числом не превышающим 8.
Осталось посчитать остальные варианты когда цифра 7 будет стоять во всех остальных местах числа:
*7*** = 10 * 1 * 11 * 11 * 11 - 3^4 = 13299
**7** = 10 * 11 * 1 * 11 * 11 - 3^4 = 13229
***7* = 10 * 11 * 11 * 1 * 11 - 3^4 = 13229
****7 = 10 * 11 * 11 * 11 * 1 - 3^4 = 13229
Чтобы получить ответ, осталось только просуммировать все полученные количества вариантов чисел = 14560 + 13229 + 13229 + 13229 + 13229 = 67476.
counter = 0
for n1 in '123456789AB': # Число не может начинаться с нуля
for n2 in '0123456789AB': #
for n3 in '0123456789AB':
for n4 in '0123456789AB':
for n5 in '0123456789AB':
s = n1 + n2 + n3 + n4 + n5
if s.count('7') == 1 and s.count('9') + s.count('A') + s.count('B') <= 3:
counter += 1
print(counter)
Ответ: 67476
Все семибуквенные слова, в составе которых могут быть только русские буквы Ф, А, В, О, Р, И, Т, записаны в алфавитном порядке и пронумерованы, начиная с 1.
Ниже приведено начало списка.
Сколько слов, стоящих под нечётными номерами, содержит буквосочетание ТРИО. При этом слово не должно начинаться и заканчиваться на ТРИО.
Комбинации для буквосочетания для ТРИО по условию задачи следующие: *ТРИО**, **ТРИО*. На позиции * может расположиться любая буква(7 вариантов букв). Для начала вычислим сколько вообще возможных комбинаций может быть в двух вариациях для нашего ТРИО:
Остаётся разобраться сколько конкретно в первом и во втором случае позиций будут находиться под чётными номерами и сколько под нечётными?
Для этого сначала буквы сопоставляются цифрам: А – 0, В – 1, И – 2, О – 3, Р – 4, Т – 5, Ф – 6. В результате исходная задача сводится к следующей:
Все 7-значные числа, составленные из цифр записаны в порядке возрастания. Вот начало списка:
Видим по списку, что имеем дело с 7-ичной системой счисления. Получается число 7: стоит под номером №8(т.е. номер на 1 больше чем само число).
По условию задачу нам необходимо тогда просчитать такие комбинации: *5423** и **5423*(* — любая цифра от минимальной 0 до максимальной 6).
Возьмём калькулятор и начало первой комбинации(чтобы было понятно, в дальнейшем можно будет уже догадаться до ответа): 0542300 – переведём число из семеричной системы в десятичную(через развёрнутую запись числа) и прибавим 1, чтобы получить номер позиции в списке:
Значит номер позиции 0542300 равен переводу числа в десятичную систему плюс 1: 94472 + 1 = 94473(№ нечётный у начала списка)
Аналогично также вычислим позицию для конца списка для комбинации 6542366 (вместо 0 – 6):
Аналогично также вычислим начало списка для второй комбинации 0054230(переводя на буквы это ААТРИОА):
Значит номер позиции 0054230 равен переводу числа в десятичную систему плюс 1: 13496 + 1 = 13497(№ нечётный у начала списка)
Аналогично можно также вычислить позицию для конца списка для комбинации 6654236, но на самом деле вычислять ничего не нужно т.к. позиция также будет нечётная. До этого легко просто догадаться например так: раз первая позиция 13496 нечётная то следующая будет (вторая) чётная, затем третья снова нечётная. А 343 позиция? Получается также будет нечётная. Вывод имеем также как и в первой комбинации(*ТРИО**) для комбинации **ТРИО* — 171 чётную и 172 нечётных позиции(всего 343).
Для ответа остаётся только сложить количество нечётных позиций у первой и у второй комбинации: 172 + 172 = 344.
Решение с доказательством выше достаточно много отнимет времени на экзамене если всё это считать как это написано выше. Можно конечно взять самую короткую комбинацию **ТРИО* → вычислить сколько всего комбинаций возможно(343) → перевести в число в семеричной системе 0054230 → и затем перевести в десятичную и получить номер позиции → увидеть что он нечётный и общее количество нечётное(343) значит 171 чётных и 172 нечётных и уже догадаться что для второй позиции(**ТРИО*) будет всё тоже самое 171 чётная и 172 нечётная. Сложить количество нечётных (там и там) и получить ответ. Но возможно некоторым (как в прочем и мне) решение на Python такой задачи покажется легче и быстрее.
С помощью библиотеки itertools:
from itertools import product
count = 0
number = 0
for p in product(sorted("ФАВОРИТ"), repeat=7):
number += 1
if number % 2 != 0 and ((p[1] == 'Т' and p[2] == 'Р' and p[3] == 'И' and p[4] == 'О') or (p[2] == 'Т' and p[3] == 'Р' and p[4] == 'И' and p[5] == 'О')):
count += 1
print(count)
Разберём построчно что тут происходит:
Ответ: 344
P.S. С помощью itertools и функции product можно решить не одну подобную задачу по ЕГЭ и не только с номером 8, а также и другие где понадобятся вложенные циклы и перебор возможных значений.
Все пятибуквенные слова, составленные из букв С, Т, Р, О, К, А, записаны в алфавитном порядке и пронумерованы.
Вот начало списка:
Определите, под каким номером в этом списке стоит последнее слово с чётным номером, которое не начинается с букв А, С или Т и при этом содержит в своей записи ровно две буквы О.
С помощью библиотеки itertools:
from itertools import product
last_number = 0
number = 0
for p in product(sorted("СТРОКА"), repeat=5):
number += 1
if number % 2 == 0 and ((p[0] != 'А' and p[0] != 'С' and p[0] != 'Т') and p.count('О') == 2):
last_number = number
print(last_number)
Разберём построчно что тут происходит:
Ответ: 5058
Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает. Для этого в ячейке с кодом нажмите клавиши на клавиатуре Shift+Enter или запустите код через кнопку Run по значку ▶.