Комбинаторика егэ информатика на питоне

Сегодня будем решать 8 задание из ЕГЭ по информатике 2022 с помощью программирования.

Восьмое задание легко решается с помощью Python.

Приступим к практике решения задач.

Задача (Классическая)

Женя составляет 5-буквенные слова, в которых встречаются только буквы А, Б, В, Г, причём буква А появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в слове любое количество раз или не встречаться совсем. Словом считается любая допустимая последовательность букв, не обязательно осмысленная. Сколько существует таких слов, которые может написать Женя?

Решение:

Напишем программу на языке Python.

k=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:
                        k=k+1
print(k)

Т.к. слова состоят из 5-ти символов, то мы формируем пять вложенных циклов! В каждом цикле перебираем все буквы, которые нам дали.

Внутри циклов мы составляем само слово в переменной s. Таким образом, в переменной s «прокрутятся» все возможные комбинации.

Но мы подсчитываем не все комбинации, а только те, где всего одна буква А.

Важно не перепутать русские и английские буквы.

Ответ: 405

Продолжим развивать навыки решения 8 задания из ЕГЭ по информатике 2022.

Задача (Каждую букву можно использовать один раз)

Артур составляет 5-буквенные коды из букв Е, С, А, У, Л. Каждую букву нужно использовать ровно один раз, при этом нельзя ставить рядом две гласные. Сколько различных кодов может составить Артур?

Источник задачи: https://kpolyakov.spb.ru/

Решение:

Запрограммируем решение этой задачи на Питоне.

k=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:
                            k=k+1   
print(k)

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

Ответ: 12

Задача(Буквы составляют перестановкой)

Петя составляет шестибуквенные слова перестановкой букв слова КАБАЛА. При этом он избегает слов с двумя подряд одинаковыми буквами. Сколько всего различных слов может составить Петя?

Решение:

k=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:
                                k=k+1
print(k)

Повторяющиеся буквы в строке, из который берём символы в циклах, всегда убираем.

Слова составляются перестановкой, значит, можно представить, что просто собирают из кубиков КАБАЛА различные слова. Следовательно, в наших словах будет ровно одна буква «К», три буквы «А», одна буква «Б» и одна буква «Л». Это программируем с помощью условия и функции .count().

Т.к. повторятся может только буква «A», то мы прописываем условие, что две буквы «А» подряд не могут находится в наших комбинациях.

Если все условия будут пройдены, то мы подсчитываем такие комбинации.

Ответ: 24

В задании 8 из ЕГЭ по информатике часто нужно проанализировать первую или последнюю букву в слове. Узнаем, как это можно сделать с помощью питона.

Задача (Проверяем первую букву слова)

Сколько слов длины 5, начинающихся с гласной буквы, можно составить из букв Е, Г, Э? Каждая буква может входить в слово несколько раз. Слова не обязательно должны быть осмысленными словами русского языка.

Источник задачи: https://kpolyakov.spb.ru/

Решение:

В этой тренировочной задаче из 8 задания ЕГЭ по информатике 2022 нужно держать на контроле первую букву в слове.

k=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=='Э':
                        k=k+1   
print(k)

Подсчитываем только те комбинации, которые начинаются с гласных букв.

Ответ: 162

Интересный пример, где можно ошибиться в 8 задании из ЕГЭ по информатике.

Задача (Важный пример)

Сергей составляет 6-буквенные коды из букв С, О, Л, О, В, Е, Й. Буква Й может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Е. Все остальные буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Сергей?

Источник задачи: https://kpolyakov.spb.ru/

Решение:

Эта задача примечательная тем, что буква «О» в слове «СОЛОВЕЙ» повторяется. В этом случае мы должны убрать повторение буквы из перебора.

k=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:
                            k=k+1   
print(k)

Здесь также учитываем остальные условия.

Ответ: 23625

Задача (Количество гласных)

Василий составляет 4-буквенные коды из букв Г, А, Ф, Н, И, Й. Каждую букву можно использовать любое количество раз, при этом код не может начинаться с буквы Й и должен содержать хотя бы одну гласную. Сколько различных кодов может составить Василий?

Источник задачи: https://kpolyakov.spb.ru/

Решение:

Напишем программу.

k=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:
                    k=k+1
            
print(k)

Ответ: 888

Порешаем задачи из восьмого задания ЕГЭ по информатике на перебор чисел.

Задача (Перебор чисел)

Сколько существует чисел, восьмеричная запись которых содержит 7 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.

Источник задачи: https://kpolyakov.spb.ru/

Решение:

k1=0
k2=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:
                                    k1=k1+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:
                                    k2=k2+1

print(k1+k2)

Число не может начинаться с нуля. Поэтому ноль был исключён из первого цикла.

Первое условие следит за тем, чтобы каждая цифра встречалась один раз в числе. Второе условие подсчитывает количество вариантов, когда первая цифра чётная. Второе условие следит за тем, чтобы чётность и нечётность цифр чередовалась. Третье условие, наоборот, подсчитывает варианты, когда первая цифра нечётная.

Операция % — остаток от деления. Если остаток от деления на 2 равен нулю, то число чётное. Если остаток от деления на 2 равен 1, то число нечётное.

Функция int() преобразует символ в число. Ведь мы работаем именно с символами, а не с реальными числами.

Ответ: 1008

Задача (Числа, Закрепление)

Сколько существует четырёхзначных чисел, записанных в восьмеричной системе счисления, в записи которых ровно две одинаковые цифры, причём стоящие рядом ?

Решение:

k=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):
                    k=k+1
print(k)

Здесь следующий принцип составления условия. Два соседа должны быть равны. Берём одного соседа из пары, где цифры должны быть равны, и комбинируем его с другими цифрами. Пишем уже, чтобы цифры были не равны. Так же прописываем, чтобы две оставшиеся цифры также не были равны. Таким образом, перебираем все варианты.

Ответ: 882

Задача (Числа, важный приём)

Сколько существует различных трёхзначных чисел в шестнадцатиричной системе счисления, в записи которых цифры следуют слева направо в невозрастающем порядке?

Решение:

k=0
for x1 in '123456789ABCDEF':
    for x2 in '0123456789ABCDEF':
        for x3 in '0123456789ABCDEF':
            if x1 >= x2 >= x3:
                k=k+1    

print(k)

Символы можно сравнивает знаками больше или меньше. Символы-цифры сравниваются, как обычные числа. Буквы сравниваются в алфавитном порядке.

Применяем этот приём и получаем ответ.

Ответ: 815

Задача(Две чётные и две нечётные цифры не стоят рядом)

Сколько существует чисел, делящихся на 5, десятичная запись которых содержит 7 цифр, причём все цифры различны и никакие две чётные и две нечётные цифры не стоят рядом.

Решение:

k=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':
                                    k=k+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':
                                    k=k+1

print(k)

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

Число должно делиться на 5, значит, в последнем цикле оставляем только 0 и 5.

Все цифры различны, поэтому применяем условие, что символ x1 встречается 1 раз, символ x2 встречается 1 раз и т.д.

Фраза «две чётные и две нечётные цифры не стоят рядом» обозначает, что цифры должны чередоваться. Например, чётная, нечётная, чётная, нечётная и т.д. (или наоборот).

Направление задаёт именно первая цифра, остальные цифры выстраиваются по ней.

Проверить чётность/нечётность цифр просто, мы проверям существует ли конкретный символ с троке из чётных или нечётных цифр.

У нас два равноправных случая: когда первая цифра чётная, и когда первая цифра нечётная.

Ответ: 2880

Следующий тип задач из задания 8 ЕГЭ по информатике лучше решать без программирования.

Задача (Со списками, классическая)

Все 4-буквенные слова, составленные из букв А, Е, И, О записаны в алфавитном порядке и пронумерованы. Вот начало списка:

1. АААА
2. АААЕ
3. АААИ
4. АААО
5. ААЕА

Запишите слово, стоящее на 248-м месте от начала списка.

Источник задачи: https://inf-ege.sdamgia.ru/

Решение:

Обозначим условно А0, Е1, И2, О3.

Важно: Нужно буквам присваивать цифры именно в том порядке, в котором они идут в самом правом столбце, потому что буквы могут дать в «перепутанном порядке» (например Е, А, И, О), и тогда ничего не получится.

ЕГЭ по информатике - задание 8 (Правильное кодирование букв)

Теперь запишем список с помощью цифр.

1. 0000
2. 0001
3. 0002
4. 0003
5. 0010

Получился обычный счёт в четверичной системе!! (всего используются 4 цифры: 0, 1, 2, 3). А слева нумерация показывает соответствие нашей десятичной системе. Но все числа десятичной системы в этой таблице соответствия сдвинуты на 1, ведь мы должны были начать с нуля.

Нас просят записать слово стоящее на 248, т.е. если была обычная таблица соответствия чисел десятичной системы и четверичной системы, слово стоящее на 248 месте, находилось бы на 247 (248 — 1) месте. Значит, наше искомое четверичное число соответствует 247 в десятичной системе.

Переведём число 247 в четверичную систему!

ЕГЭ по информатике - задание 8 (перевод числа из десятичной системы в четверичную)

Получилось число 33134 в четверичной системе. Сделаем обратное декодирование в буквы. Таким образом, ответ будет ООЕО.

Ответ: ООЕО

Ещё одна похожая задача 8 задания из примерных вариантов ЕГЭ по информатике 2022, но другой вариации.

Задача (Классика, Другая вариация)

Все 5-буквенные слова, составленные из букв А, Р, У, К записаны в алфавитном порядке. Вот начало списка:

1. ААААА
2. ААААК
3. ААААР
4. ААААУ
5. АААКА
……
Укажите номер слова УКАРА

Источник задачи: https://inf-ege.sdamgia.ru/

Решение:

Закодируем буквы цифрами: А0, К1, Р2, У3. Здесь как раз буквы даны не в том порядке, как они идут в самом правом столбце. Но мы должны кодировать именно в том порядке, как буквы идут в самом правом столбце.

ЕГЭ по информатике - задание 8 (кодирование букв цифрами)

У нас получилось четыре цифры! Значит снова можно слова превратить в таблицу соответствия между десятичной системой и четверичной системой. Но десятичная система смещена на 1 позицию.

1. 00000
2. 00001
3. 00002
4. 00003
5. 00010
……

Выписываем данное нам слово и посмотрим, какое число в четверичной системе было бы, если бы у нас были в место слов числа в четверичной системе!

ЕГЭ по информатике - задание 8 (кодируем слово цифрами)

Получили число в четверичной системе 310204. Узнаем, какое число в десятичной системе соответствовало этому числу, если бы была обычная таблица соответствия. Для этого переведём число 310204 из четверичной системы в десятичную. Перевод делаем по аналогии перевода из двоичной системы в десятичную.

ЕГЭ по информатике - задание 8 (Перевод из четверичной в десятичную систему)

Но помним, что у нас нумерация идёт на 1 быстрее, нежели мы бы поставили десятичные числа, как в таблице соответствия, потому что нумерация начинается не с нуля, а с 1. Поэтому к числу 840 нужно прибавить 1, и в ответе будет 841

Ответ: 841

Задача (Демонстрационный вариант ЕГЭ по информатике, 2020)

Все 4-буквенные слова, в составе которых могут быть буквы Н, О, Т, К, И,
записаны в алфавитном порядке и пронумерованы, начиная с 1.
Ниже приведено начало списка.

1. ИИИИ
2. ИИИК
3. ИИИН
4. ИИИО
5. ИИИТ
6. ИИКИ

Под каким номером в списке идёт первое слово, которое начинается
с буквы О?

Решение:

Закодируем буквы цифрами.

ЕГЭ по информатике - задание 8 (кодируем буквы цифрами от 0 до 4)

Получилось 5 цифр ( 0, 1, 2, 3, 4 ), значит, будем работать в пятеричной системе.

Нужно найти номер первого слова, которое начинается с буквы О. Если говорить на языке пятеричных чисел, то нужно найти номер числа 30005. Мы «забиваем нулями», чтобы число было четырёхразрядное, т.к. слова 4-х буквенные. Именно нулями, потому что нужно именно первое слово найти.

Теперь, как в предыдущей задаче, переведём число 30005 из пятеричной системы в десятичную.

0 * 5 0 + 0 * 5 1 + 0 * 5 2 +
3 * 5 3 = 375 (в десят. системе)

Но опять же должны прибавить 1 к числу 375, т.к. нумерация отличается от десятичных чисел на 1 в большую сторону.

Ответ: 376

Задача (Формула Шеннона)

В корзине лежат 8 черных шаров и 24 белых. Сколько бит информации несет сообщение о том, что достали черный шар?

Источник задачи: https://inf-ege.sdamgia.ru/

Решение:

Данную задачу нужно решать по формуле Шеннона

ЕГЭ по информатике - задание 8 (Формула Шеннона)

Найдём вероятность p того, что вытащили чёрный шарик.

p = (количество чёрных шаров) / (количество всех шаров) = 8 / (24 + 8) = 8 / 32 = 1 /4

p = 1 / 4

Применим формулу Шеннона.

x = log2(4)
2x = 4

x = 2 бита

Ответ: 2

Счастливых экзаменов!

Спасибо большое за отличный разбор. В задаче «Сколько существует различных трёхзначных чисел в шестнадцатЕричной системе счисления, в записи которых цифры следуют слева направо в невозрастающем порядке» можно немного упростить условие, так как строки сравниваются именно по их коду. Итак, условие ord(x1)>=ord(x2)>=ord(x3) заменяем на x1>=x2>=x3. И все работает также!!!

Здраствуйте пробовал решить задачу на pytone
Артур составляет 6-буквенные коды перестановкой букв слова КАБАЛА. При этом нельзя ставить рядом две гласные. Сколько различных кодов может составить Артур?
У вас я не было в примере такой задачи я посмотрел примеры у других блогеров.
Вот мой код выводит108 но правильный ответ 24 поясните пожалуйста где я ощибся?
letters = ‘КАБАЛА’
s=set()
for x1 in letters:
for x2 in letters:
for x3 in letters:
for x4 in letters:
for x5 in letters:
for x6 in letters:
word=x1+x2+x3+x4+x5+x6
if word.count(‘А’) ==3 and word.count(‘АА’)==0:
s.add(word)
print(len(s))

определите количество пятизначных чисел записанных в десятичной системе счисления в записи которых есть 1 при этом никакая четная цофра не считает рядом с фирой 1

Всем привет, Давыдову тоже.

Задание номер 8 — задание базового уровня сложности, выполнение которого предполагает знание о методах измерения количества информации и не требует использования специального ПО.

Зачастую в номере 8 мы можем встретить задания связанные с комбинаторикой — перестановками, количеством вариантов выборки и т.д. Для решения заданий такого типа можно приспособить модуль itertools языка python.

Сразу оговорюсь, что я не рекомендую решать задание именно таким способом. Я советую проверять свой ответ, полученный ручным решением. Написанная программа не должна быть единственным вариантом решения.

Модуль itertools доступен в питоне «из коробки», т.е. его нет необходимости устанавливать дополнительно. А значит, он будет доступен на экзамене.

Ссылка на документацию по модулю https://docs.python.org/3/library/itertools.html

Использованные в данной статье методы и функции доступны как минимум с версии питона 3.6

Для импорта необходимых функции необходимо их импортировать из модуля

from itertools import product, permutations

  1. product

Позволяет получить прямое, или декартово произведеение двух множеств — множество, элементами которого являются все возможные упорядоченные пары элементов исходных множеств.

a = ‘AB’

b = ‘CD’

print(*product(a, b))

(‘A’, ‘C’) (‘A’, ‘D’) (‘B’, ‘C’) (‘B’, ‘D’)

Получение произведения двух множеств не очень актуально в 8 задании, но мы можем использовать другую возможность функции product: получение всевозможных комбинаций определенной длины для одного множества.

a = ‘AB’

print(*product(a, repeat=3))

(‘A’, ‘A’, ‘A’) (‘A’, ‘A’, ‘B’) (‘A’, ‘B’, ‘A’) (‘A’, ‘B’, ‘B’) (‘B’, ‘A’, ‘A’) (‘B’, ‘A’, ‘B’) (‘B’, ‘B’, ‘A’) (‘B’, ‘B’, ‘B’)

Мы получили всевозможные комбинации длины 3 для набора из двух букв АВ. Причем результат работы функции — набор кортежей.

Параметр repeat отвечает за длину слова.

Из полученных наборов мы можем выбрать подходящие для нас. Например, так можно решить задание из демоверсии 2021.

Модуль itertools для решения задания 8, изображение №1

Длина слова здесь 3, а набор букв — ШКОЛА. Получим всевозможные комбинации:

a = ‘ШКОЛА’

comb = product(a, repeat=3))

Осталось выбрать те, где буква К встречается ровно 1 раз.

Модуль itertools для решения задания 8, изображение №2

Поскольку подсчет количества вхождений в кортеж организовать сложнее, чем в строке, здесь элементы кортежа «склеиваются» по пустой строке, образуя тем самым не кортеж, а строку. Метод count подсчитывает количество вхождений подстроки ‘K’.

Этот же код можно оформить в одну строку через списочное выражение

print(len([item for item in product(‘ШКОЛА’, repeat=3) if ”.join(item).count(‘К’) == 1]))

2. permutations

Позволяет получить всевозможные перестановки.

print(*permutations(‘ABC’))

(‘A’, ‘B’, ‘C’) (‘A’, ‘C’, ‘B’) (‘B’, ‘A’, ‘C’) (‘B’, ‘C’, ‘A’) (‘C’, ‘A’, ‘B’) (‘C’, ‘B’, ‘A’)

Это опять набор кортежей.

Рассмотрим такое задание с сайта kpolyakov.spb.ru

Модуль itertools для решения задания 8, изображение №3

Получаем перестановки

a = ‘КАПКАН’

comb = permutations(a)

И отбираем нужные варианты

Модуль itertools для решения задания 8, изображение №4

Поскольку в слове КАПКАН есть повторяющиеся буквы А и К, мы должны поделить итоговое количество на 4 (дважды поделить на 2), поскольку с нашей точки зрения эти комбинации неотличимы друг от друга.

Другой способ убрать повторяющиеся комбинации — превратить набор перестановок в множество, которое в питоне исключает повторы

Модуль itertools для решения задания 8, изображение №5

Так-же можно написать решение в одну строку

print(len([i for i in set(permutations(‘КАПКАН’)) if all(i[j] != i[j + 1] for j in range(5))]))

Подведем итог. Задачи на составление слов путем выбора букв из набора или путем перестановки букв в слове можно решить с использованием модуля itertools. Написание кода не займет много времени, зато будет уверенность в ручном решении.

🧑‍💼 Сергей составляет 6-буквенные коды из букв Е, Л, Е, Й. Буква Й может использоваться в коде не более одного раза, при этом она не может стоять на первом месте, на последнем месте и рядом с буквой Е. Все остальные буквы могут встречаться произвольное количество раз или не встречаться совсем. Сколько различных кодов может составить Сергей?

Для задач комбинаторики можно использовать библиотеку itertools, которая позволяет делать переборы по различным комбинациям.

Основные необходимые методы библиотеки:
▪️product() — декартовое произведение всех вариантов

Например: (1 2 3) * (1 2 3) = (1 1 ), (2 2), (3 3), (1 2) и тд..

▪️permutations() — перестановки

Например: (1 2 3) = (1 2 3 ), (2 1 3), (3 2 1) и тд..

В данной задаче используем декартовое произведение всех вариантов, в котором количество символ будет = 6, задается параметром repeat.

✌️ полный гайд по itertools:
youtube.com/watch?v=xIEVAm7BakE

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter. Мы обязательно поправим!

Учитель информатики высшей
категории Жевтило Ирина Аскольдовна

МБОУ «Лицей «Дубна»

Использование
библиотеки itertools при решении задач ЕГЭ по информатике

В встроенном в Python модуле itertools существует
ряд комбинаторных функций. Рассмотрим некоторые из них:

· product() –
прямое произведение одного или нескольких итераторов.

· permutations() –
перестановки и размещения элементов множества.

Данная библиотека позволяет
решать задачи с комбинаторикой, упрощая программу решения.

Вызов модуля itertools:

from itertools import *

Данный модуль можно
использовать для решения задач №8 ЕГЭ по информатике.

Примеры заданий и способы
использования данного модуля.

Пример 1. МАРИНА из букв своего имени составляет слова перестановкой
исходных букв. Сколько различных слов может составить МАРИНА, если первая буква
не может быть гласной?

Аналитический способ решения

Общее количество слов с
учетом, что в слове две буквы «А» (перестановка этих букв не дает нового слова)

Вычтем количество слов,
начинающихся с гласной с учетом 2 букв «А»:

Позиция в слове

*

*

*

*

*

*

Количество букв

3 (МРН)

5

4

3

2

1

Получаем =180 слов

Итого: 360 – 180 = 180

Программа для решения данной
задачи:

from itertools import *

a=’МАРИНА

k=0

for i in set(permutations(a)):

    s=».join(i)

    if s[0] not in ‘АИ‘:

        k+=1

print(k)

В программе
используем

1)    функцию: 
permutations(a), т.к. слова составляются
перестановкой букв;

2)   
используем множества (set), чтобы слова не повторялись;

3)    в условии проверяем отсутствие гласных  в начале слова.

Пример 2. Используем функцию product

Миша составляет
5-буквенные коды из букв К, А, Л, Ь, К, А. Каждая допустимая гласная буква
может входить в код не более одного раза. Сколько кодов может составить Миша?

Аналитический способ решения

Количество слов без «А»

3*3*3*3*3= 35 =243

Количество слов с одной  «А»

5 вариантов *3*3*3*3 = 405

Итого: 243 + 405 = 648

Программа для решения данной
задачи:

from itertools import*

a=’КАЛЬ’

k=0

for i in product(a, repeat=5):

    s=».join(i)

    if s.count(‘А’)<=1 :

        k+=1                               

print (k)

В программе
используем

1)    функцию
product (a, repeat=5):
, т.к. буквы в слове могут повторяться;

2)    в условии проверяем количество гласных  не более 1.

Время урока: 1 Декабря 2022 17:00

Дедлайн д/з: 4 Декабря 2022 23:55

На занятии по теме «Библиотека Itertools. Комбинаторика на Python (задание 8)» мы изучим:
📌библиотеку itertools;
📌программу для решения задач;
📌шаблон для сочетаний, перестановок и размещений.

Домашнее задание
еще не выдано

Заглядывай сюда после окончания урока 😉



    • Библиотека Itertools. Комбинаторика на Python (задание 8)
      .pdf

Нужно авторизоваться

Нужно авторизоваться

вконтакте

Введите больше 6 символов


На почту 12345@mail.ru отправлена ссылка для сброса пароля.

Пожалуйста, подтвердите ваш номер телефона

Нужно авторизоваться

Нужно авторизоваться

Нужно авторизоваться

вконтакте

Введите больше 6 символов


На почту 12345@mail.ru отправлена ссылка для сброса пароля.

Пожалуйста, подтвердите ваш номер телефона

Пополнение
счёта

Курс заблокирован

К сожалению, данный курс заблокирован. Необходимо внести доплату

Вывод
средств

Ваше задание
подтверждено!

успешно

Теперь вы можете приступить
к следующему уроку
курса по математике

Перейти к уроку

Подтверждение
замены

Для смены номера телефона
мы отправили Вам код по СМС,
введите его в поле ниже.

Подтвердить

Ты включаешь автопродление — 25-го числа каждого месяца доступ к купленным курсам будет автоматически продлеваться. Деньги будут списываться с одной из привязанных к учетной записи банковских карт. Управлять автопродлением можно из раздела «Финансы»

Для активации регулярного платежа мы спишем небольшую сумму с карты и сразу её вернем

Вы дествительно хотите отменить автопродление?

Благодарим за покупку!

В ближайшее время курс будет доступен в разделе Моё обучение

Материалы будут доступны за сутки до начала урока

Чат будет доступен после выдачи домашнего задания

Укажите вашу электронную почту

Мы используем cookie. Это позволяет нам анализировать взаимодействие посетителей с сайтом и делать его лучше. Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Для лучшей работоспособности сайта просим вас отключить AdBlock.

OK

https://doi.org/10.32517/2221-1993-2021-20-10-54-60

Полный текст:

  • Аннотация
  • Об авторе
  • Список литературы

Аннотация

В статье рассмотрена методика выполнения задания No 8 ЕГЭ по информатике и ИКТ двумя способами: математическим комбинаторным расчетом и написанием программы на языке программирования Python. Целью данной методики является успешное выполнение выпускниками заданий, встречающихся под No 8 (до 2021года — No 10) в Едином государственном экзамене по информатике и ИКТ. Статья имеет междисциплинарный характер, затрагивает вопросы, находящиеся на стыке математики и информатики. Актуальность работы связана с тем, что задания данного типа ежегодно присутствуют в ЕГЭ по информатике и ИКТ, однако успешность выполнения данного задания слишком низкая для заданий базового уровня сложности. Использование средств программирования на ЕГЭ по информатике и ИКТ доступно начиная с 2021 года. Научная новизна работы заключается в применении языка программирования Python для решения заданий такого типа. Особенность методики заключается в поэтапном увеличении сложности алгоритмов и «модульном» применении частей кода, который позволяет использовать «модули» предыдущих задач для решения последующих. Предложены конкретные варианты программ, приведен сравнительный анализ методов для различных прототипов соответствующих заданий. В результате определено, что задание No 8 можно эффективно решать методом программирования.

Ключевые слова

Об авторе

В. Г. Смольняков

средняя общеобразовательная школа № 17 с углубленным изучением отдельных предметов

Россия

учитель информатики и математики

Список литературы

1. Демонстрационная версия ЕГЭ по информатике 2021 года. https://fipi.ru/ege/demoversii-specifikacii-kodifikatory#!/tab/151883967-5

2. ЕГЭ по информатике // Cайт К. Ю. Полякова. https://kpolyakov.spb.ru/school/ege.htm

3. Информатика и ИКТ. Подготовка к ЕГЭ-2021. 10 тренировочных вариантов по демоверсии 2021 года: учебное пособие / под ред. С. Ю. Кулабухова. Ростов н/Д.: Легион, 2021. 160с.

4. Крылов C. С., Чуркина Т. Е. ЕГЭ. Информатика и ИКТ: типовые экзаменационные варианты: 20 вариантов. М.: Национальное образование, 2021. 256 с.

5. Решу ЕГЭ. Информатика. https://inf-ege.sdamgia.ru

Рецензия

Для цитирования:


Смольняков В.Г. Методика выполнения задания № 8 ЕГЭ по информатике и ИКТ комбинаторным способом и способом программирования на Python. Информатика в школе. 2021;(10):56-62. https://doi.org/10.32517/2221-1993-2021-20-10-54-60

For citation:


Ssmolnyakov V.G. Methodology for solving the task no. 8 of the unified state exam in informatics and ICT by a combinatory method and method of programming on python. Informatics in school. 2021;(10):56-62.
(In Russ.)

https://doi.org/10.32517/2221-1993-2021-20-10-54-60

Просмотров: 200

Время на прочтение
4 мин

Количество просмотров 84K

Стандартная библиотека python, начиная с версии 2.2, предоставляет множество средств для генерирования комбинаторных объектов, но в интернете мне не удалось найти ни одной статьи, которая подробно рассказывала бы о работе с ними. Поэтому я решил исправить это упущение.

Начну с того, что расскажу о комбинаторике и ее основных формулах. Если же вы уже знакомы с этим разделом математики — можете пропустить эти абзацы.

Допустим, у нас есть строка, состоящая из n разных букв и мы хотим вычислить все способы переставить эти буквы местами так, чтобы получить новую строку. На первую позицию в строке мы можем выбрать одну из n букв, имеющихся у нас, на вторую позицию одну из n-1-ой буквы и так далее. В итоге получаем произведение n (n-1)… *1 = n! количество перестановок из n элементов без повторений.

Теперь представим, что количество букв в строке ограничено. У нас есть n доступных букв и мы хотим вычислить количество способов составить из них строку длины k, где k < n, каждую букву мы можем использовать лишь единожды. Тогда на первую позицию в строке мы можем поставить одну из n букв, на вторую позицию одну из n-1 буквы и на k-ую позицию одну из n-k+1 буквы. Общее количество строк будет равно n (n — 1) (n — 2) (n — k + 2) (n — k + 1) = n!/(n-k)! количество размещений из n по k. Если же уникальность букв не требуется, то мы получим формулу nnn = n^k количество размещений из n по k с повторениями.

До этого мы перебирали последовательности с учетом порядка элементов, а что если порядок для нас не имеет значения. Например, у нас есть есть n разных конфет и мы хотим выбрать k из них, чтобы подарить другу, при чем k < n. Сколько существует способов выбрать k конфет из n без учета порядка? Ответ прост, в начале найдем размещение из n по k без повторений, но тогда одинаковые наборы конфет, имеющие разный порядок их следования будут повторяться. Сколько существует способов переставить k конфет? Правильно, перестановка из k элементов без повторений. Итоговый ответ: размещения из n по k делим на перестановки из k без повторений. Формула: $n!/(n-k)!/k!$ количество сочетаний из n по k.

Рассмотрим случай посложнее, у нас есть n коробок каждая из которых содержит множество конфет одного вкуса, но в разных коробках вкусы разные. Сколько существует способов составить подарок другу из k конфет, при чем один и тот же вкус может встречаться любое количество раз? Так как порядок для нас значения не имеет, давайте разложим подарочные сладости следующим образом: в начале будут лежать последовательно конфеты первого вкуса, затем второго и так далее, а между конфетами разных вкусов положим спички, если конфеты какого-то вкуса отсутствуют в нашем подарке — спички, которые должны были окаймлять этот вкус слева и справа будут стоять рядом. Того у нас получится последовательность, состоящая из k конфет и n-1 спички, ибо вкусов всего n, а спички разделяют их. Теперь заметим, что по расположению спичек, мы можем восстановить исходное множество. Тогда ответом будет количество способов разместить n-1 спичку в n+k-1 ячейку без учета порядка, что равно количеству сочетаний из n+k-1 по n-1, формула: $(n+k-1)!/k!/(n-1)!$ количество сочетаний из n по k с повторениями.

Теперь рассмотрим несколько задач на комбинаторику, чтобы закрепить материал.

Задача 1

Есть 20 человек, сколько существует способов разбить их на пары
Решение: возьмем первого человека, сколько существует способов выбрать ему пару: $20-1 = 19$, возьмем второго человека, сколько существует способов выбрать ему пару: $20-2-1 = 17$. Ответ: 19!!! = 654729075

Задача 2

Есть 10 мужчин и 10 девушек, сколько существует способов разбить их на компании, состоящие из одинакового количества и мужчин и девушек, пустая компания не считается
Решение:
Cпособ 1: количество способов собрать компанию из одного мужчины и одной девушки равно произведению количества способов выбрать одну девушку и количества способов выбрать одного мужчину. Количество способов выбрать одну девушку из 10 равно сочетанию из 10 по 1 без повторений, с мужчинами аналогично, поэтому возведем в квадрат. Далее аналогично вычислим сочетания из 10 по 2, из 10 по 3 и так далее до сочетания из 10 по 10. Итоговая формула: $(10!/(10-1)!/1!)^2 + (10!/(10-2)!/2!)^2 + ... +(10!/(10-10)!/10!)^2$.
Способ 2: рассмотрим множество мужчин, входящих в компанию и множество девушек, не входящих в нее. По этому множеству можно однозначно восстановить компанию, а количество людей в нем всегда равно 10, так как $k + (10 - k) = 10$, k — количество мужчин в компании, $10 - k$ — количество девушек, не вошедших в нее. Количество таких множеств равно количеству сочетаний из 20 по 10, в конечном ответе мы также вычтем единицу, чтобы не учитывать пустую компанию, когда в нашем множестве 10 девушек. Итоговая формула: $20!/(20-10)!/10! - 1 = 184755$.

Итак, мы разобрались с теорией, теперь научимся генерировать комбинаторные объекты с помощью стандартной библиотеки python.
Работать мы будем с библиотекой itertools

from itertools import *

С помощью функции permutations можно сгенерировать все перестановки для итерируемого объекта.

Пример 1

for i in permutations('abc'):
    print(i, end=' ') # abc acb bac bca cab cba
print()
for i in permutations('abb'):
    print(i, end=' ') # abb abb bab bba bab bba 

Исходя из второго вызова заметим, что одинаковые элементы, стоящие на разных позициях, считаются разными.

Пример 2

for i in permutations('abc', 2):
    print(i, end=' ') # ab ac ba bc ca cb 

Размещение отличается от перестановки ограничением на количество доступных ячеек

Пример 3

for i in product('abc', repeat=2):
    print(i, end=' ') # aa ab ac ba bb bc ca cb cc

C помощью размещений с повторениями можно легко перебрать все строки фиксированной длины, состоящие из заданных символов

Пример 4

for i in combinations('abcd', 2):
    print(i, end=' ') # ab ac ad bc bd cd 

С помощью сочетаний без повторений можно перебрать все наборы не повторяющихся букв из заданной строки, массива или другого итерируемого объекта без учета порядка

Пример 5

for i in combinations_with_replacement('abcd', 2):
    print(i, end=' ') # aa ab ac ad bb bc bd cc cd dd  

Результат аналогичен вызову combinations, но в результат также добавлены множества с одинаковыми элементами.

Материалы:
Н.В. Горбачев «Сборник олимпиадных задач по математике»
Документация по python на русском

Понравилась статья? Поделить с друзьями:
  • Комбинаторика в задачах егэ математика
  • Комбинаторика в егэ по математике профиль
  • Комбинативная изменчивость егэ
  • Комбеды это егэ
  • Комбат товарищ алексеенко утверждал что мост через реку егэ