Решение задач ЕГЭ по информатике средствами языка Python
Автор: Ильченко Олег Юрьевич, Сырицына Валентина Николаевна, Кадеева Оксана Евгеньевна
Журнал: Высшее образование сегодня @hetoday
Рубрика: Вопросы обучения и воспитания
Статья в выпуске: 11-12, 2021 года.
Бесплатный доступ
Рассматриваются предметные и методические аспекты единого государственного экзамена по информатике. Анализируются особенности решения сложной части заданий единого государственного экзамена по программированию на языке Python, приводятся примеры решения таких заданий.
Единый государственный экзамен, программирование на языке python, среда jupiter notebook, методический подход к заданиям единого государственного экзамена, программирование
Короткий адрес: https://sciup.org/148323061
IDR: 148323061 | DOI: 10.18137/RNU.HET.21.11-12.P.042
Текст научной статьи Решение задач ЕГЭ по информатике средствами языка Python
это всегда способствует развитию творчества и самостоятельности. Главное для обучающегося – научиться читать программный код, «прогонять» первые итерации цикла у себя в голове, чтобы понимать, как работает программа, как меняются переменные в ней. Понимание работы программы – это залог успешной сдачи экзамена. Задачи 6, 16, 17, 22 ЕГЭ не требуют углубленного знания языка програм- мирования, в этих программах не содержится много ступеней ветвлений, не нужно работать с файлами. Умение работать со строками, массивами, понимание условного оператора и циклов – это тот багаж знаний, которым должен владеть обучающийся, чтобы успешно справиться с такими задачами. Задания, которые мы рассмотрим в данной статье, требуют от обучающегося знания алгоритмов сортировки, нескольких языков программирования, высокого уровня владения навыками программирования, развитого логического мышления [2; 4].
Рассмотрим подходы к решению задач ЕГЭ по информатике при помощи языка программирования Python. В качестве примеров взяты задания из официальной демоверсии ЕГЭ по информатике за 2021 год на сайте Федерального инсти- тута педагогических измерений (ФИПИ) и пособия К.Ю. Полякова [5; 6].
Задача 6
Тема: Анализ работы программы с циклом.
Требования к обучающимся:
-
• знать основные конструкции языка Python: объявление переменных; оператор присваивания; оператор вывода; циклы;
-
• уметь читать программу, выполнять программу; определять переменную, от преобразования которой зависит количество шагов цикла; уметь определять по программе количество требуемых шагов цикла; различать входные и выходные данные.
Пример задачи:
Определите, при каком наибольшем введенном значении переменной s программа выведет число 64. Для Вашего удобства программа представлена на четырех языках программирования (см. Рисунок 1).
Решение (теоретическое рассуждение):
-
1. Переменная s получает свое значение путем ввода пользователем.
-
2. Далее переменная s переопределяется. Как было рассмотрено ранее, операция « //» является целочисленным делением, в нашем случае s нацело делится на число 10.
-
3. Переменная n получает значение 1.
-
4. Затем идет цикл While с условием, что переменная s меньше 51 ( s<51 ). На каждой итерации цикла значение переменной s увеличивается на величину 5 , а переменная n увеличивается в два раза.
-
5. На вывод подается переменная n .
По условию задачи, переменная n в конце работы программы имеет значение 64, из этого следует: 64 = 26, для того чтобы получить n = 64, необходимо выполнить тело цикла 6 раз. Максимальное число, при котором цикл выполнится последний раз — 50. А следующий шаг — 55 — уже не пройдет. Тогда ответ — 55 – 5 · 6 = 25. Так как на первом шаге берется целое от деления на 10, то третью цифру нужно взять максимально возможную — 9. Путем теоретического исследования получили ответ: наибольшее значение переменной s=259.
Решение с помощью программы на Python:
Запустим среду программирования на Python Jupyter Notebook и наберем код программы. Величину переменной s получить можно подбором, но лучше всего найти закономерность, для этого:
-
1. Вводим сначала 1 – на выводе получаем 2048, затем вводим 100 – на выводе получим 512, исходя из этого, можно увидеть, что при увеличении s значение n уменьшается (см. Рисунок 2).
-
2. Пробуем увеличить s еще в 2,5 раза, на выходе получаем 64, то есть искомое значение. Но задача состоит в том, чтобы найти наибольшее значение s , поэтому увеличивая вводимое значение на 1, выясним, что при 259 программа выводит значение 64, а при 260 – 32 (см. Рисунок 3).
-
3. Ответ найден. Наибольшее значение переменной s , при котором n = 64, равно 259.
Задача 16
Тема: Рекурсия. Рекурсивные процедуры и функции
Требования к обучающимся:
• знать: условие окончания рекурсии, то есть значения параметров функции, для которых значение функции известно или вычисляется без рекурсивных вызовов; рекуррентную формулу (или формулы), с помощью которых значение функции для заданных значений параметров вычисляется через значение (или значения) функции для других значений параметров (то есть, с помощью рекурсивных вызовов);
-
• уметь реализовать рекуррентную функцию на Python’е, например, F ( n ) = 1 при n ? 1
F ( n ) = n + 1 + F ( n– 1), при n > 1
На языке программирования это будет выглядеть так (см. Рисунок 4):
Пример задачи:
Алгоритм вычисления функции F ( n ) задан следующими соотношениями:
F ( n ) = 1 при n = 1
F ( n ) = n + F ( n– 1), если n четно,
F ( n ) = 2· F ( n– 2), если n > 1 и n нечетно.
Чему равно значение функции F (26)?
Решение задачи:
Пусть известно значение n . Построим массив a , так чтобы значение элемента a[n] совпадало со значением F ( n ). Учитывая, что в Python нумерация элементов массива начинается с нуля, будем использовать фиктивный нулевой элемент. Согласно условию, в первый элемент нужно записать число 1 (« F ( n ) = 1 при n = 1»): a = [0, 1], затем перебираем в цикле все значения индексов элементов, начиная с 2 и до n включительно, вычисляя для каждого значение функции. Фактически сначала вычисляется F(2) и записывается в элемент массива a[2] , затем находим F(3) и записываем в элемент массива a[3] и так далее (см. Рисунок 5).
Стоит заметить, что вместо рекурсивных вызовов здесь используются уже готовые значения F ( n ) для меньших значений n , ранее записанные в массив a. Теперь можно построить функцию, которая возвращает значение a[n] , и вызвать print(F(26)) (см. Рисунок 6) :
Получили ответ. Задача решена.
Задача 17
Тема: Перебор целых чисел на заданном отрезке. Проверка делимости
Требования к обучающимся:
-
• знать основные принципы построения программы на языке программирования;
• уметь использовать простой перебор без оптимизации; уметь пользоваться электронными таблицами.
РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON
Паскаль |
Python |
Алгоритмический язык |
vars,n:integer;begin readln(s); s:=sdiv10; n:=1; whiles<51dobegin s:=s+5; n:=n*2end;writeln(n) end. |
s=int(input()) s=s//10 n=1 whiles<51: s=s+5 n =n,,,,,,,,,,,,,*2 print(n) |
алгнач целn,s вводs s:=div(s,10)n:=1 нцпокаs<51s:=s+5 n:=n*2 кцвыводn кон |
С++ |
||
#include intmain() {ints,n;cin>>s; s=s/10;n=1;
while(s<51){s=s+5;n=n*2;}cout< return0; } |
Рисунок 1. Пример программы с циклом [6]
s = int(input()) S = S // 10 n = 1 while s < 51: 5 = 5 + 5 n = n * 2 print(n) |
s = int(input()) s = s // 10 n = 1 while s < 51: s = s + 5 n = n * 2 print(n) |
1 2048 |
100 512 |
Рисунок 2. Подбор значений

Рисунок 3. Решение задачи 6
def F(n): if n == 1: return 1 if n % 2 == 0:
return n + F(n-l) else:
return 2 * F(n-2)
Рисунок 4. Рекуррентная функция for i in range(2, n+1): if i % 2 == 0:
a.append( i + a[i-l] ) else:
a.append( 2*a[i-2] )
def F( n ):
a = [®, 1]
for i in range(2, n+1):
if i % 2 == 0:
a.append( i + a[i-l] ) else:
a.append( 2*a[i-2] )
return a[n]
print (F(26))
Рисунок 5. Начало программы
Рисунок 6. Решение задачи
Рассмотрим задачу в общем виде. Пусть необходимо перебрать все целые числа на отрезке [a; b] и определить, для скольких из них выполняется некоторое условие. Общая структура цикла перебора на языке Python записывается так, как показано на Рисунке 7.
Проверка делимости числа n на число x осуществляется при помощи операции взятия остатка от деления n на x : если остаток равен 0, число n делится на x нацело. Данная проверка в Python осуществляется так, как показано на Рисунке 8.
Пример задачи:
Рассматривается множество целых чисел, принадлежащих числовому отрезку (1016; 7937), которые делятся на 3 и не делятся на 7, 17, 19, 27. Найдите количество таких чисел и максимальное из них. В ответе запишите два целых числа: сначала количество, затем максимальное число. Для выполнения этого задания можно написать программу или воспользоваться редактором электронных таблиц.
Решение задачи:
Проанализируем условие: интересующие нас числа делятся на 3 и не делятся на такие числа, как 7, 17, 19 и 27 (это будет являться условием проверки). Перебор чисел выгоднее осуществлять в порядке возрастания, так как последнее найденное число будет являть максимальным из перебранного количества. (Это также требуется найти в задаче. В случае, когда требуется найти наименьшее число, перебор начинается в порядке убывания).
Составим программу на Python (см. Рисунок 9):
Решение найдено. 1568 – такое количество чисел удовлетворяет критерию поиска (в условном операторе if), 7935 – максимальное число из количества удовлетворяющих условию чисел. Ответ указан в Рисунке 8.
Задача 22
Тема: Анализ программы, содержащей подпрограммы, циклы и ветвления.
Требования к обучающимся:
-
• знать операции деления с остатком (%) и целочисленного деления (//);
-
• уметь выполнять работу операторов присваивания, циклов в языке программирования Python.
Пример задачи:
Ниже на четырех языках программирования записан алгоритм. Получив на вход число x , этот алгоритм печатает два числа: L и M . Укажите наибольшее число x , при вводе которого алгоритм печатает сначала 4, а потом 5 (см. Рисунок 10).
Решение задачи:
Проанализируем программу. Переменная x получает значение путем ввода пользователем. Переменным Q и L присваиваются значения 9 и 0 соответственно. Далее идет цикл While , рассмотрим его (см. Рисунок 11).
Так как переменная L изначально равна нулю, а затем с каждой итерацией в цикле увеличивается на 1, она несет функцию счетчика повторения цикла. На каждой итерации цикла из переменной Q вычитается x до тех пор, пока x не станет меньше Q. Фактически определяется, сколько раз «поместится» Q в x . Из данных рассуждений можно понять, что данный цикл – это операция деления, при этом, как только цикл завершится, переменная L будет нести значение частного, а переменная x – остаток от деления введенного значения Q .
Далее переменная M получает значение переменной x, и если M Логика приведенных выше рассуждений оказалась верной, при вводе пользователем числа 49, выводятся числа 4 и 5. Если не удалось провести анализ программы, можно найти альтернативное решение. В данном случае найдем подходящее значение перебором (или как говорят программисты «bruteforce» – методом «грубой силы»). Для этого осуществим следующее: 1. Строку, где вводится x, удаляем [x = int (input ())]. 2. Введем переменную x0 и основную часть программы заключим в цикл (можно использовать цикл с параметром, если есть уверенность, что максимальное значение точно не больше, например, 500). Результат представлен на Рисунке 13. Далее строки, в которых выводятся результаты заменяем на проверку нужного нам случая. По условию задачи должны получиться числа 4 и 5, поэтому, если должны быть выведены числа 4 и 5, выводим на экран переменную x0 (см. Рисунок 14). В итоге получим полностью переделанную программу (см. Рисунок 15). Если запустить данную программу, она даст результат 41 и 49, что соответствует минимальному и максимальному подходящему числу. В условиях данной задачи ответ будет 49. Задача решена. Задача 24 Тема: Обработка символьных строк Требования к обучающимся: • знать конструкции языка Python; знать несколько способов решения подобных задач; • уметь читать строку из файла (программно); уметь работать с конструкцией with – as. (см. Рисунок 16). РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON value = 0 # переменная, которая запоминает количество чисел for n in range (a, b+1): # цикл с параметром, для перебора заданного диапазона if условие выполнено: # условный оператор, для отбора значений value+= 1 # или же vaLue=vaLue+l print (value) # вывод количества чисел Рисунок 7. Общая структура перебора if п % х == 0: print("Делится") «операция «%» - взятие остатка от деления п на х «если п нацело делится на х,получаем ответ else: print ("Не делится") # если п нацело не делится на х, получаем ответ Рисунок 8. Проверка делимости числа n на число x value_sum = 0 «переменная, служащая для записи кол-ва чисел удовлетворяющих условию value_max = 0 «переменная, служащая для записи максимального значения числа в диапазоне for n in range(1016, 7937+1): «цикл с параметром, где способ range задаёт нужный диапазон if (п % 3 == 0) and (п % 7 1= 0) and (п % 17 1= 0) and (п % 19 1= 0) and (п % 27 1= 0): value_max = п value_sum += 1 # аналогично, что и value_sum=vaLue_sum+l print(value_sum, value_max) # вывод переменных, являющихся решением задачи | 1568 7935 Рисунок 9. Решение задачи 17 С++ Python #include intmain() { intx,L,M,Q;cin>>x; Q=9; L=0; while(x>=Q){L=L+1; x=x-Q; } M=x; if(M L=x; } cout< x=int(input()) Q=9 L=0 whilex>=Q: L=L+1 x=x–Q M=x ifM Алгоритмический язык Паскаль алгнач целx,L,M,Q вводxQ:=9 L:=0 нцпокаx>=QL:=L+1 x:=x-Q кц M:=x еслиM то M:=LL:=x все выводL,нс,M кон varx,L,M,Q:integer;begin readln(x);Q:=9; L:=0; whilex>=Qdobegin L:=L+1;x:=x-Q; end; M:=x; ifM M:=L; L:=x; end;writeln(L);writeln(M); end. Рисунок 10. Условие задачи 22 while x >= Q: L = L + 1 x = x - Q Рисунок 11. Цикл While с условием x>= Q x = int(input()) Q = 9 L = 0 while x >= Q: L = L * 1 x = x - Q M = x if M < L: M = L L = x print(L) print(M) 4 5 Рисунок 12. Решение задачи 22 For x0 in range(l,501): # здесь нужно поместить запись основного алгоритма Рисунок 13. Альтернативное решение задачи 22 if L = 4 and М = 5 print(x0) Рисунок 14. Условие вывода переменной x0 for х0 in range(l,500): X = X0 Q = 9 L = 0 while x >= Q: L = L + 1 x = x - Q M = X if M < L: M = L L = x if L == 4 and M == 5 print(x0) РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON Аргумент r при вызове функции open записывает ссылку на данный аргумент в файловую переменную F, выполняет тело блока (читает первую строку файла в переменную s) и закрывает (освобождает) файл. Readline() – эта функция считывает строки из данного файла и возвращает их в виде строки. Пример задачи: Текстовый файл состоит не более чем из 106 символов X, Y и Z. Определите максимальное количество идущих подряд символов, среди которых каждые два соседних различны. Для выполнения этого задания следует написать программу. Решение задачи: Имеется файл, содержащий последовательность символов X, Y, Z. Нужно определить количество идущих подряд символов, «соседи» которых различны [5]. Для начала откроем имеющийся файл (как это сделать, рассмотрено выше). Чтобы считать длину цепочки (количество идущих подряд символов), введем два счетчика, присвоив им значение единицы: • curLen (от англ. CurrentLength – «Текущая длина») – длина текущей цепочки (которая сейчас обрабатывается); • maxLen (от англ. MaxLength – «Максимальная длина») – длина наибольшей на данный момент цепочки уже в обработанной части строки. При помощи цикла с параметром будем «прогонять» текущий документ (см. Рисунок 17). Метод range задает начало и конец диапазона, в данном случае с первого символа до конца документа (len(s) – считает длину s, которая в себе содержит данные документа, то есть величина длины служит конечной границей диапазона). В тело данного цикла поместим условный оператор if с условием, которое выясняет, отличен ли текущий символ от предыдущего символа (см. Рисунок 18). Если значение истинно (то есть символы различны), то переменную curLen увеличиваем на единицу и проверяем величины curLen и maxLen. Если текущая длина станет больше максимальной, то последней присвоится значение текущей. Если символы одинаковые, то переменной CurLen присваиваем значение 1. В конце поставим на вывод переменную maxLen, именно она запоминала максимальное число идущих подряд символов. Соберем всю программу и запустим (см. Рисунок 19). Переменная maxLen в ходе выполнения программы получила значение 35. Оно является ответом задачи. То есть количество символов, у каждого из которых разный «сосед», в данном файле равняется 35. Задача 25 Тема: Обработка целых чисел. Проверка делимости. Требования к обучающимся: • знать: конструкции языка Python; несколько способов решения подобных задач; • уметь: читать строку из файла (программно); создавать собственные программы (10–20 строк) для обработки целочисленной информации; строить информационные модели объектов, систем и процессов в виде алгоритмов. Пример задачи [6]: Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку (174457; 174505), числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в таблицу на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке таблицы также должны следовать в порядке возрастания. Решение задачи: Согласно условию, программа должна найти числа, которые имеют ровно два делителя, при этом сами числа и единицу в расчет брать нельзя. Следуя логике, можно прийти к выводу, что произведение этих двух делителей должно давать само число (например, число 6 – откидываем 1 и 6 автоматически, остаются его делители – только 2 и 3, а произведение 2 и 3 дает нам само число 6). Так как условие требует записать делители в порядке возрастания, то нужно начинать перебор от меньшего числа к большему на заданном отрезке (это не обязательно, но рационально, так как исключит лишние строки кода). Будет эффективно использовать более ускоренный перебор делителей, то есть для числа N перебирать только числа от 2 до q = N (не включая точный квадратный корень, если он существует); все делители – парные, то есть если a – делитель N, то b = N / a – тоже делитель N. Логика данной программы подходит для любого заданного количества делителей. Так как нужно выводить все делители, кроме единицы и самого числа, цикл перебора делителей начинаем с 2 и включаем q = N . Если очередной делитель d –это точный квадратный корень, добавляем в список делителей только один делитель, если нет – то добавляем пару делителей (d, x // d). Запишем полностью всю программу и запустим ее (см. Рисунок 20). Получили ответ. Делители выведены на экран в порядке возрастания, чего и требовало условие задачи. Задача 26 Тема: Обработка массива целых чисел из файла. Сортировка. Требования к обучающимся: • знать: конструкции языка Python; различные способы решения подобных задач; • уметь читать данные из файла и понимать, как хранить их в массиве. В Python, для того чтобы сохранить данные в массиве, используются списки (list). Рисунок 17. Цикл for для прогонки документа for i in range(l, len(s)): if s[i] != s[i-l]; curLen += 1 if curLen > maxLen: maxlen = curLen else: curLen = 1 maxLen, curLen = 1, 1 for i in range(l, len(s)): if s[i] != s[i-l]: curLen += 1 if curLen > maxLen: maxLen = curLen else: curLen = 1 print( maxLen ) Рисунок 19. Решение задачи 24 from math import sqrt divCount = 2 # нужное количество делителей for n in range(174457, 174505+1): divs = [] q = int(sqrt(n)) for d in range(2,q+l): if n X d == 0: if d == n//d: divs = divs + [d] else: divs = divs + [d, n//d] if len(divs) > divCount: break «если число имеет больше двух делителей, оно не будет учитываться if len(divs) == divCount: print( *divs ) # символ * осуществляет вывод без структурных скобок списка [] 3 58153 7 24923 59 2957 13 13421 149 1171 5 34897 211 827 2 87251 Рисунок 20. Решение задачи 25 for i in range(N): data[i] = int(doc.readline()) РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON Пример задачи [6]: Системный администратор раз в неделю создает архив пользовательских файлов. Однако объем диска, куда он помещает архив, может быть меньше, чем суммарный объем архивируемых файлов. Известно, какой объем занимает файл каждого пользователя. По заданной информации об объеме файлов пользователей и свободном объеме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранен в архиве, при условии, что сохранены файлы максимально возможного числа пользователей. Входные данные. В первой строке входного файла 26.txt находятся два числа: S – размер свободного места на диске (натуральное число, не превышающее 100 000) и N – количество пользователей (натуральное число, не превышающее 10 000). В следующих N строках находятся значения объемов файлов каждого пользователя (все числа натуральные, не превышающие 100), каждое в отдельной строке. Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранен в архиве, при условии, что сохранены файлы максимально возможного числа пользователей. Пример входного файла: 100 4 При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объемы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объем файла из перечисленных пар – 50, поэтому ответ для приведенного примера: 2 50 Решение задачи: Стоит отметить, что Python идеально подходит для решения этой задачи, так как он имеет множество встроенных методов, что значительно сократит код программы, если сравнивать с кодом на Pascal или C++. 1. Для начала нужно прочитать данные из файла; читаем все строки сразу в массив data (см. Рисунок 22). 2. Декодируем два числа из первой строки; первое записываем в переменную S, а второе записываем в переменную с именем «_»; первую строку сразу удаляем (см. Рисунок 23). 3. Преобразуем данные в целые числа и сразу сортируем (см. Рисунок 24). 4. Теперь накапливаем сумму в переменной total, пока она остается не больше, чем Σ (см. Рисунок 25). 5. Как только сумма превысила Σ, произойдет выход из цикла по оператору break, а в переменной i останется количество добавленных значений. Выводим его на экран (printi). 6. Вычисляем запас, который мы можем уменьшить с помощью замены одного выбранного значения на другое (см. Рисунок 26). 7. Теперь выбираем из массива данных те значения, которые могут быть выбраны: разность между таким значением и наибольшим выбранным элементом data[i] должна быть не больше, чем delta (см. Рисунок 27). 8. Остается найти второй ответ – максимум из чисел-кандидатов: 9. Приведем полную программу и запустим ее (см. Рисунок 28). (print (max(candidates)). Ответ получен. Задача решена. Задача 27 Тема: Обработка данных, вводимых из файла в виде последовательности чисел. Требования к обучающимся: • знать: конструкции языка Python; различные способы реше- ния подобных задач; основы комбинаторики; • уметь обрабатывать данные; выводить последовательность чисел из файла. Пример задачи [6]: Имеется набор данных, состоящий из пар положительных целых чисел. Необходимо выбрать из каждой пары лишь одно число так, чтобы сумма всех выбранных чисел не делилась на 3 и при этом была максимально возможной. Гарантируется, что искомую сумму получить можно. Программа должна напечатать одно число – максимально возможную сумму, соответствующую условиям задачи. Входные данные: Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество пар N (1 ≤ N ≤ 100000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 10 000. Пример организации исходных данных во входном файле: 1 3 5 12 6 9 5 4 3 3 1 1 Для указанных входных данных значением искомой суммы должно быть число 32. В ответе укажите два числа: сначала значение искомой суммы для файла А, затем для файла B. Решение задачи: В задачах, представленных выше, разобрались, как прочитать данные из файла. В языке Python это будет выглядеть так, как показано на Рисунке 29. На начальном этапе не будем учитывать требование «чтобы сумма всех выбранных чисел не делилась на 3» и найдем максимальную сумму. Для этого достаточно выбрать из каждой пары максимальное число (см. Рисунок 30). Рисунок 22. Хранение данных в массиве data S, _ = map(int, data[0].split()) del data[0] Рисунок 23. Код программы data = sorted(list(map(int, data))) Рисунок 24. Сортировка данных total = 0 for i, val in enumerate(data) if total ♦ val > S: break total ♦= val Рисунок 25. Код программы Рисунок 26. Код программы data = doc.readlines() S, _ = map(int, data[0].split()) del data[0] data = sorted(list(map(int, data))) total = 0 for i, val in enumerate(data): if total + val > S: break total += val print(i) delta = S - total candidates = [x for x in data if x-data[i-l] <= delta] print(max(candidates)) Рисунок 28. Решение задачи 26 N = int(Fin.readlineO) for i in range(N): a, b = map( int, doc.readline().split() ) # здесь будем работать с переменными а и b doc.close() Рисунок 29. Код программы s = 0 for i in range(N): a, b = map(int, doc.readline().split()) s ♦= max(a, b) print(s) РЕШЕНИЕ ЗАДАЧ ЕГЭ ПО ИНФОРМАТИКЕ СРЕДСТВАМИ ЯЗЫКА PYTHON Если полученная сумма не делится на 3, то решение задачи найдено. Можно вводить ответ. Если же сумма не делится на 3, то в этом случае нужно заменить число в одной из пар, вместо максимального взять второе, минимальное. При этом, для того чтобы сумма получилась максимальной, нужно выбрать пару, в которой разница между числами минимальная и не делится на 3 (иначе делимость новой суммы на 3 сохранится). Будем искать значение dMin – минимальную разницу между числами одной из пар, не делимое на 3; тогда при выводе в случае делимости суммы s на 3 выводим s-dMin, что соответствует замене числа в одной паре (см. Рисунок 31). Теперь соединим все части и получим полную программу (см. Рисунок 32). Обработка файла А дает ответ 127127, а обработка файла B – ответ 399762080. Получили от- вет: 127124 399762080. Задача решена. На основе приведенных выше примеров заданий на уроке по информатике можно объяснять обучающимся сложные задания. Таким образом, учащиеся научатся не только решать задания из цикла ЕГЭ по информатике, но и анализировать решения задач по программированию, находить логические пути решения таких задач. dMin = 10001 for i in range(N): a, b = map( int, Fin.readline().split() ) s += max( a, b ) d = abs( a-b ) if d X 3 > 0: dMin = min( d, dMin ) if s X 3 != 0: print( s ) else: print( s-dMin ) N = int(doc.readline()) s, dMin = 0, 10001 for i in range(N): a, b = map(int, doc.readline().split()) s += max(a, b) d = abs(a-b) if d X 3 > 0: dMin = min(d, dMin) if s X 3 1=0: print(s) else: print(s-dMin) N = int(doc.readline()) s, dMin = 0, 10001 for i in range(N): a, b = map(int, doc.readline().split()) s += max(a, b) d = abs(a-b) if d X 3 > 0: dMin = min(d, dMin) if s X 3 != 0: print(s) else: print(s-dMin)
Список литературы Решение задач ЕГЭ по информатике средствами языка Python
- Бизли Д.М. Python. URL: https://ru.pdfdrive.com/python-nодpобный-cпpавочник-e156670585.html (дата обращения 19.01.2021).
- Кадеева О.Е., Сырицына В.Н., Репш Н.В., Белов А.Н. Краткий обзор качественной составляющей ЕГЭ по информатике в приморском крае // Ученые записки университета им. Лесгафта. СПб. ФГБОУВПО Национальный государственный Университет физической культуры, спорта и здоровья имени П.Ф. Лесгафта. Санкт-Петербург, 2019. № 12(178). С. 128-133.
- Лейнингем И. Освой самостоятельно Python за 24 часа. URL: https://knigogid.ru/books/966155-osvoy-samostoyatelno-python-za-24-chasa (дата обращения 12.04.2021).
- Любанович Б. Просто Python, современный стиль программирования. СПб.: Питер, 2016. 280 с.
- МакГрат М. Программирование на Python для начинающих. М.: Эксмо, 2015. 192 с.
- Поляков К.Ю. Преподавание, наука и жизнь: ЕГЭ по информатике 2021. URL: https://kpolyakov.spb.ru/school/ege.htm (дата обращения 17.02.2021).
- Сваруп К. Укус питона. Подробный справочник; пер. с англ. В. Смоляр. URL: https://wombat.org.ua/AByteOfPython/AByteofPythonRussian-2.02.pdf (дата обращения 12.04.2021).
- Сузи Р.А. Язык программирования Python: Учебное пособие. М.: БИНОМ. Лаборатория знаний, 2006. 328 с.