СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Тесты ЕГЭ по информатике 2019 2 ВАРИАНТ

Категория: Информатика

Нажмите, чтобы узнать подробности

Содержание верного ответа

Задание А

Ниже приводится пример переборного решения на Паскале, не эффективного ни по памяти, ни по времени, но являющимся правильным ответом на задание А.

Программа 1.

const s = 8; {требуемое расстояние между показаниями} var N: integer; a:array[1..10000] of integer; {все показания датчика} mp: integer; {минимальное значение произведения} i, j: integer; begin readln(N); {Ввод значений датчика} for i := 1 to N do readln(a[i]); mp := 1000 * 1000 + 1;for i := 1 to N - s do begin for j := i + s to N do begin if (a [ i] * a[j] mod 2 = 0) and (a [ i] * a[j] < mp) then mp := a[i] * a[j] end; end; if mp = 1000 * 1000 + 1 then mp := -1; writeln(mp) end.

Задание Б

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

Для каждого показания с номером k, начиная с k = 9, рассмотрим все допустимые по условиям задачи пары, в которых данное показание получено вторым. Минимальное произведение из всех этих пар будет получено, если первым в паре будет взято минимальное подходящее показание среди всех, полученных от начала приёма и до показания с номером k — 8. Если очередное показание чётное, минимальное среди предыдущих может быть любым, если нечётное — только чётным.

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

Ниже приводится пример такой программы на Паскале, эффективной по памяти и по времени.

Программа 2.

const s = 8; {требуемое расстояние между показаниями} аmах = 1001;{больше максимально возможного показания}var N: integer; a; array[l..s] of integer; {хранение s показаний датчика} а_: integer; {ввод очередного показания} mа: integer; {минимальное число без s последних} mе: integer; {минимальное чётное число без s последних} mp: integer; {минимальное значение произведения} р: integer; i, j: integer; begin readln (N); {Ввод первых s чисел} for i : = 1 to s do readln(a[i]); {Ввод остальных значений, поиск минимального произведения} mа : = аmах; mе := аmах; mр := аmах*аmах; for i := s + 1 to N do begin readln(a_); if a [ 1] < та then та := a[1] ; if{a[1] mod 2 = 0) and {a[1] < me) then me := a[1]; if a_ mod 2=0 then p := a_ * ma else if me < amax then p := a_ * me else p := amax * amax; if (p < mp) then mp := p; {сдвигаем элементы вспомогательного массива влево} for j := 1 to s - 1 do a[j] := a [j + 1]; a [s] := a_ end; if mp = amax * amax then mp := -1; writeln(mp) end.


Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!