ЛКД | Решение задач #1 | Задачи на комбинаторику ФИПИ, Е. Джобс, М. Ишимов
Подталкивайте себя вперед,
потому что никто другой не сделает это за вас.
Первая задача:
(М. Ишимов) Сколько существует шестеричных семизначных чисел, содержащих в своей записи ровно одну цифру 2, при этом никакая чётная цифра не стоит рядом с цифрой 2?
from itertools import product
def ok(s):
if s[0] == '0':
return False
if s.count('2') != 1:
return False
s = s.replace('0', '@')
s = s.replace('4', '@')
if '22' in s:
return False
if '2@' in s:
return False
if '@2' in s:
return False
return True
c = set()
for i in product('012345', repeat = 7):
s = ''.join(i)
if ok(s):
c.add(s)
print(len(c))
Важный момент: мы в этой задачи должны получить семизначное число, если цифра 0 стоит первым символом, то такое число является шестизначным. Например, 023456 — это то же самое, что и 23456. 0 перед числами ни на что не влияет!
Вторая задача:
(Е. Джобс) Все четырехбуквенные слова, в составе которых могут быть только буквы П, Я, Т, Ь, Д, Н, Е, Й, записаны в алфавитном порядке и пронумерованы начиная с 1. Вот начало списка:
- ДДДД
- ДДДЕ
- ДДДЙ
- ДДДН
- ДДДП
- ДДДТ
- ДДДЬ
- ДДДЯ
- ДДЕД ...
Под каким номером в списке стоит последнее слово, которое не содержит ни одной гласной и все буквы в нем различны?
from itertools import product, permutations
count = 0
for i in product('ДЕЙНПТЬЯ', repeat=4):
s = ''.join(i)
count += 1
if 'Е' not in s and 'Я' not in s:
for v in permutations('ДЙНПТЬ', r=4):
if ''.join(v) in s:
print(count)
Важный момент: для того, чтобы отсортировать по алфавиту, можно использовать sorted()
Третья задача:
Из букв слова Р А З М А Х составляются 6-буквенные последовательности. Сколько можно составить различных последовательностей, если известно, что в каждой из них содержится не менее 3 согласных?
from itertools import product, permutations
def ok(s):
s = s.replace('Р', '@')
s = s.replace('З', '@')
s = s.replace('М', '@')
s = s.replace('Х', '@')
if s.count('@') < 3:
return False
return True
c = set()
for i in product('РАЗМАХ', repeat = 6):
s = ''.join(i)
if ok(s):
c.add(s)
print(len(c))
Важный момент: можно все согласные заменить на любой один символ и посчитать количество (сколько раз встречается символ) символа в строке.
Это были все задачи на сегодня! Предлагайте свои решения и свои задачи, которые не можете решить. Работаем!
Вы сильны. Вы прекрасны. Вы любимы. Вы особенны. Вы не слабы. Вы не неполноценны. Вы не странны. Вы не безнадежны.
У тебя всё получиться! Да, я к тебе обращаюсь!