Этот материал посвящен решению задач 8 типа ЕГЭ по информатике с использованием Python. Задачи 8 типа относятся к базовому уровню сложности и предполагают выполнение за 4 минуты. Они основаны на кодировании данных и комбинаторике, требуя составления всех возможных комбинаций из заданного набора символов и выбора тех, которые удовлетворяют заданным условиям.
Задача 1: Пятибуквенные кодовые слова
Алексей составляет пятибуквенные кодовые слова из букв a, b, c, x, причем x может быть на последнем месте или отсутствовать. Сколько различных кодовых слов может использовать Алексей?
Решение с вложенными циклами:
letters = 'abcx'
k = 0
for i1 in letters:
for i2 in letters:
for i3 in letters:
for i4 in letters:
for i5 in letters:
word = i1 + i2 + i3 + i4 + i5
if (word[-1] == 'x' and word.count('x') == 1) or word.count('x') == 0:
k += 1
print(k)
Решение с использованием модуля itertools:
import itertools
letters = 'abcx'
words = itertools.product(letters, repeat=5)
k = 0
for word_tuple in words:
word = "".join(word_tuple)
if (word[-1] == 'x' and word.count('x') == 1) or word.count('x') == 0:
k += 1
print(k)
Задача 2: Четырехбуквенные коды
Василий составляет четырехбуквенные коды из букв о, и, е, й, 7. Код не может начинаться с й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий?
import itertools
letters = 'оие7й'
words = itertools.product(letters, repeat=4)
k = 0
for word_tuple in words:
word = "".join(word_tuple)
if word[0] != 'й' and (word.count('о') + word.count('и') + word.count('е') >= 1):
k += 1
print(k)
Задача 3: Шестибуквенные последовательности из слова «РАЗМАХ»
Из букв слова «РАЗМАХ» составляются шестибуквенные последовательности. Сколько различных последовательностей можно составить, если в каждой из них содержится не менее трех согласных?
import itertools
letters = 'РАЗМАХ'
words = itertools.permutations(letters, 6)
unique_words = set()
for word_tuple in words:
word = "".join(word_tuple)
if word.count('Р') + word.count('З') + word.count('М') + word.count('Х') >= 3:
unique_words.add(word)
print(len(unique_words))
Задача 4: Пятибуквенные коды из слова «АРЕАЛ»
Артур составляет пятибуквенные коды перестановкой букв слова «АРЕАЛ», не ставя рядом две гласные. Сколько различных кодов может составить Артур?
import itertools
letters = 'АРЕАЛ'
words = itertools.permutations(letters)
unique_words = set()
for word_tuple in words:
word = "".join(word_tuple)
if not ("АА" in word or "АЕ" in word or "ЕА" in word):
unique_words.add(word)
print(len(unique_words))
Задача 5: Восьмибуквенные коды из слова «АММИАК АТ»
Вася составляет восьмибуквенные коды из букв слова «АММИАК АТ», при этом каждая буква должна встречаться столько же раз, сколько в исходном слове. В коде должны стоять рядом две гласные или две согласные.
import itertools
letters = 'АММИАК АТ'
words = itertools.permutations(letters)
unique_words = set()
vowels = 'АИА'
consonants = 'ММКАТ'
for word_tuple in words:
word = "".join(word_tuple)
valid = False
for i in range(len(word) - 1):
if (word[i] in vowels and word[i+1] in vowels) or (word[i] in consonants and word[i+1] in consonants):
valid = True
break
if valid:
unique_words.add(word)
print(len(unique_words))
Задача 6: Пятибуквенные кодовые слова из букв «ОБЩЕСТВ»
Андрей составляет пятибуквенные кодовые слова из букв «ОБЩЕСТВ». Слово не может начинаться с «щ» или «б», должно заканчиваться на «ов», не может содержать «ев» и «ве», но обязательно содержит «тп».
import itertools
letters = 'ОБЩЕСТВ'
words = itertools.product(letters, repeat=5)
k = 0
for word_tuple in words:
word = "".join(word_tuple)
if (word[0] not in 'щб') and word[-2:] == 'ов' and 'ев' not in word and 'ве' not in word and 'тп' in word:
k += 1
print(k)
Задача 7: Количество слов между «ДОМОК» и «КОМОТ»
Пятибуквенные слова из букв «ДКМО» записаны в алфавитном порядке. Определите количество слов между «ДОМОК» и «КОМОТ» (включая эти слова).
import itertools
letters = 'ДКМО'
words = sorted(list(itertools.permutations(letters)))
domok_index = words.index('ДОМОК')
komot_index = words.index('КОМОТ')
print(komot_index - domok_index + 1)
Задача 8: Номер первого слова, начинающегося на «С» с двумя соседними «О»
Петя составляет пятибуквенные слова из букв «СТЕКЛО» в алфавитном порядке. Найдите номер первого слова, начинающегося на «С» и содержащего две соседние буквы «О».
import itertools
letters = 'СТЕКЛО'
s = 0
for word_tuple in itertools.permutations(letters):
word = "".join(word_tuple)
s += 1
if word[0] == 'С' and 'ОО' in word:
print(s)
break
Разбираемые задачи демонстрируют различные подходы к решению задач 8 типа ЕГЭ по информатике. Использование модуля itertools значительно упрощает и ускоряет процесс генерации комбинаций. Важно помнить о специфике задачи и учитывать такие моменты, как повторяющиеся буквы (использование множеств для исключения дубликатов) и особенности алфавитного порядка.