📋 Условие
ФИПИ заявляет восьмое задание в ЕГЭ как задачу на проверку знания основ комбинаторного счёта. Шаблон для её решения очень простой.
🔍 Подробное решение
Сколько слов длины 5, начинающихся с гласной буквы, можно составить из букв М, Е, C, Я, Ц? Каждая буква может входить в слово несколько раз.
Решение:
На первой позиции могут быть только гласные буквы (Е или Я) — 2 варианта.
На остальных 4 позициях может быть любая буква из набора М, Е, C, Я, Ц — 5 вариантов для каждой позиции.
Применяем правило произведения:
N = 2 × 5 × 5 × 5 × 5 = 2 × 625 = 1250
Ответ: 1250
Решение:
На первой позиции могут быть только гласные буквы (Е или Я) — 2 варианта.
На остальных 4 позициях может быть любая буква из набора М, Е, C, Я, Ц — 5 вариантов для каждой позиции.
Применяем правило произведения:
N = 2 × 5 × 5 × 5 × 5 = 2 × 625 = 1250
Ответ: 1250
📚 Теория
Комбинаторика. Перестановки, размещения, сочетания с повторениями и без.
🐍 Шаблон Python
Python
from itertools import *
# С повторениями
for i in product('123', repeat=3):
x = ''.join(i)
# БЕЗ повторений
for i in permutations('123', r=3):
x = ''.join(i)
# Проверки
if x[0] != '0': # не начинается с 0
if x.count('1') == 4: # ровно четыре 1
if x[0] != x[1] != x[2]: # одинаковые не рядом
x = x.replace('2', '*') # замена элементов
if x[0] <= x[1] <= x[2]: # алфавитный порядок
if 'НН' not in s and 'ЧЧ' not in s: # чередование 🐍 Альтернативный способ
Способ 2
from itertools import *
# 14-ричные, ровно 2 разные цифры, оканч. на 0 или 3
k = 0
for x in product('0123456789abcd', repeat=5):
s = ''.join(x)
if s[0] != '0' and len(set(s)) == 2 and s[-1] in '03':
k += 1
print(k)
# 16-ричные, одна 9, чётные/нечётные не рядом
k = 0
for s in product('0123456789ABCDEF', repeat=4):
s = ''.join(s)
if s[0] != '0' and s.count('9') == 1:
for el in '02468ACE':
s = s.replace(el, 'Ч')
for el in '13579BDF':
s = s.replace(el, 'Н')
if 'НН' not in s and 'ЧЧ' not in s:
k += 1
print(k)
# Номер слова УСПЕХ
k = 0
for i in product(sorted('УСПЕХ'), repeat=5):
x = ''.join(i)
if x[-1] in 'СПХ':
k += 1
if x == 'УСПЕХ':
print(k, x)