Найти в Дзене

Алгоритм решения задания 9 ЕГЭ по информатике. Часть 4

В прошлой статье мы познакомились с программными методами решения 9 заданий ЕГЭ по информатике. Научились грамотно экспортировать данные из электронных таблиц, читать файлы с помощью Python и разобрали типовые функции, которыми будем пользоваться в наших решениях. Теперь настало время закрепить пройденный материал и применить его на практике для решения первого типа 9 заданий. Напомним, что в заданиях этого типа от нас требуется подсчитать количество строк, для которые одно или несколько условия выполняются одновременно. Давайте далее разберём основные конструкции, которыми мы будем пользоваться для получения ответа и опробуем их на паре примеров. Итак, со считыванием данных мы уже познакомились еще в прошлой статье. Всегда будет использоваться только такая конструкция: После этого блока кода мы будем писать функции для проверки каждого условия из формулировки. Типовые функции мы уже рассмотрели, но под каждое задание мы будем их немного корректировать. Теперь рассмотрим самое главное:
Оглавление

В прошлой статье мы познакомились с программными методами решения 9 заданий ЕГЭ по информатике. Научились грамотно экспортировать данные из электронных таблиц, читать файлы с помощью Python и разобрали типовые функции, которыми будем пользоваться в наших решениях.

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

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

Алгоритм решения

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

-2

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

Теперь рассмотрим самое главное: последний блок, в котором будем проверять все строки на соответствие условиям и выводить ответ.

Как уже говорили, в заданиях первого типа нам нужно дать в ответ количество строк. Логично предположить, что следует создать некую переменную-счётчик, в которой будем хранить количество подходящих строк. Обычно такую переменную называют counter (счётчик) или сокращённо cnt. Изначально приравняем её к нулю:

-3

Далее мы в цикле for переберём каждый список с числами из нашей переменной data:

-4

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

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

-5

Здесь f – название функции, в которой мы и реализуем проверку условия.

Если же условий несколько, и они должны выполняться оба, то поставим между ними оператор and:

-6

Как вы уже могли понять, f1 и f2 названия функций для каждого из условий.

При выполнении этой строки кода с условным оператором if мы увеличим значение переменной counter на 1 такой записью:

-7

После завершения цикла выведем значение этой переменной – это и будет ответом. Весь блок кода с проверкой строк и выводом ответа выглядит так:

-8

На этом все. У нас есть начало программы со считыванием данных из файла, у нас есть окончание с проверкой всех строк и выводом ответа. Эти два блока будут перетекать из решения в решение и не будут меняться. Все, что от нас требуется: правильно составить функции для проверок условий. Давайте этим и займемся на следующих примерах.

Пример 1

Для разогрева рассмотрим простую формулировку всего с одним условием:

Задание 903

«Откройте файл электронной таблицы, содержащей в каждой строке четыре натуральных числа. Определите количество строк таблицы, в которых сумма наибольшего и наименьшего чисел не больше суммы двух оставшихся.»

Файл мы уже открыли, скопировали все значения в текстовый и сохранили под именем «903.txt». Если вы не помните, как это делается, то вернитесь к прошлой статье.

В наших решениях далее будем опускать первый и последний блоки кода, которые мы уже разобрали выше. Сразу будем писать функции для проверки условий.

Поскольку в этом задании всего одно условие, то и функция у нас будет одна. Давайте построчно её составим. Для начала нужно определить наибольшее и наименьшее число в строке. В этом нам помогут функции max() и min() соответственно:

-9

В следующей строке найдём сумму оставшихся чисел. Можем просто вычислить сумму всех чисел в строке и отнять от результата максимальное и минимальное числа.

-10

Теперь проверим, что сумма максимального и минимального меньше или равна сумме оставшихся чисел. Если это так, то вернём True, иначе – False. Запишем неравенство после оператора return:

-11

И вся наша функция выглядит следующим образом:

-12

На этом всё. Перед функцией вставляем блок с чтением данных, после – с проверкой каждой строки и выводом ответа. Всё наше решение выглядит так:

-13

Запускаем программу и на экране видим ответ на это задание – 15115.

Пример 2

Но вернёмся к заданиям с двумя условиями. Следующая у нас будет такая формулировка:

Задание 905

«Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполняются оба условия:

– в строке есть два числа, каждое из которых повторяется трижды, одно число без повторений;
– наибольшее из повторяющихся чисел больше неповторяющегося числа.

В ответе запишите только число.»

Перед тем как приступим к решению задания, давайте подумаем, как определить, что в строке два числа повторяются трижды. Предположим, что у нас есть такой список чисел: 0, 0, 0, 2, 2, 2, 4.

Воспользуемся разобранным в прошлой статье кодом для подсчёта количества вхождений каждого числа в список и выведем его на экран:

-14

Что же, у нас 6 троек и 1 единица. Первые три тройки означают вхождения в исходный список числа 0, а вторые – числа 2. Таким образом, в подходящей под рассматриваемое условие строке должно быть 6 троек и 1 единица.

Проверим наше утверждение и вычислим количество троек и единиц в списке cnt:

-15

Отлично! Осталось оформить это в виде функции:

-16

Переходим ко второму условию. Для него нам нужно будет составить список с повторяющимися и список с неповторяющимися числами, как мы это делали в прошлой статье:

-17

Из повторяющихся нам нужно наибольшее, так что воспользуемся уже знакомой функцией max(): max(repeat).

А поскольку не повторяется у нас всего одно число, то возьмем просто первый (и единственный) элемент из списка no_repeat. Вся функция для проверки второго условия выглядит так:

-18

Теперь собираем все части нашего кода в месте и получаем такую программу:

-19

После запуска видим, что всего одна строка подходит под оба условия. Значит, в ответ пишем число 1.

На этом и закончим разбирать первый тип 9 заданий. В следующей статье разберём задания второго типа и изучим специальную функцию для работы как с индексами, так и со значениями итерируемых объектов в цикле.

<<< Предыдущая статья Следующая статья >>>