Группа СДАЙ ЕГЭ СДАЙ ЕГЭ Kotik 1 месяц назад

ЛКД | Решение задач #1 | Задачи на комбинаторику ФИПИ, Е. Джобс, М. Ишимов

177 просмотров
ЛКД | Решение задач #1 | Задачи на комбинаторику ФИПИ, Е. Джобс, М. Ишимов

Подталкивайте себя вперед, 
потому что никто другой не сделает это за вас.


Первая задача:
(М. Ишимов) Сколько существует шестеричных семизначных чисел, содержащих в своей записи ровно одну цифру 2, при этом никакая чётная цифра не стоит рядом с цифрой 2?

from itertools import productdef 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 Truec = 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. Вот начало списка:

  1. ДДДД
  2. ДДДЕ
  3. ДДДЙ
  4. ДДДН
  5. ДДДП
  6. ДДДТ
  7. ДДДЬ
  8. ДДДЯ
  9. ДДЕД ...

Под каким номером в списке стоит последнее слово, которое не содержит ни одной гласной и все буквы в нем различны?

from itertools import product, permutationscount = 0for 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, permutationsdef ok(s): s = s.replace('Р', '@') s = s.replace('З', '@') s = s.replace('М', '@') s = s.replace('Х', '@') if s.count('@') < 3: return False return Truec = set()for i in product('РАЗМАХ', repeat = 6): s = ''.join(i) if ok(s): c.add(s)print(len(c))

Важный момент: можно все согласные заменить на любой один символ и посчитать количество (сколько раз встречается символ) символа в строке. 


Это были все задачи на сегодня! Предлагайте свои решения и свои задачи, которые не можете решить. Работаем! 

Вы сильны. Вы прекрасны. Вы любимы. Вы особенны. Вы не слабы. Вы не неполноценны. Вы не странны. Вы не безнадежны.

У тебя всё получиться! Да, я к тебе обращаюсь!

Нет комментариев. Ваш будет первым!