27 задание. Часть вторая
Предисловие
Вот и вторая часть по решению 27 здания. В этот раз будут рассматриваться демонстрационные варианты с 2014 по 2016 годы. Здесь будет представлена задача по нахождению контрольного значения, которая не была представлена ранее, а также две экспериментальных задачи.
Источник: Демонстрационный вариант ЕГЭ 2016 г. ИНФОРМАТИКА и ИКТ, 11 класс.
1. В физической лаборатории проводится долговременный эксперимент по изучению гравитационного поля Земли. По каналу связи каждую минуту в лабораторию передаётся положительное целое число – текущее показание прибора «Сигма 2015». Количество передаваемых чисел в серии известно и не превышает 10 000. Все числа не превышают 1000. Временем, в течение которого происходит передача, можно пренебречь. Необходимо вычислить «бета-значение» серии показаний прибора – минимальное чётное произведение двух показаний, между моментами передачи которых прошло не менее 6 минут. Если получить такое произведение не удаётся, ответ считается равным –1.
Вам предлагается два задания, связанных с этой задачей: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение одного из заданий не представлено, то считается, что оценка за это задание – 0 баллов. Задание Б является усложнённым вариантом задания А, оно содержит дополнительные требования к программе.
А. Напишите на любом языке программирования программу для решения поставленной задачи, в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов. Перед программой укажите версию языка программирования. ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ А. Максимальная оценка за выполнение задания А – 2 балла.
Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик). Программа считается эффективной по времени, если время работы программы пропорционально количеству полученных показаний прибора N, т.е. при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз. Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.
Перед программой укажите версию языка программирования и кратко опишите использованный алгоритм. ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ Б. Максимальная оценка за правильную программу, эффективную по времени и по памяти, – 4 балла. Максимальная оценка за правильную программу, эффективную по времени, но неэффективную по памяти, – 3 балла.
НАПОМИНАЕМ! Не забудьте указать, к какому заданию относится каждая из представленных Вами программ.
Входные данные представлены следующим образом. В первой строке задаётся число N – общее количество показаний прибора. Гарантируется, что N > 6. В каждой из следующих N строк задаётся одно положительное целое число – очередное показание прибора.
Пример входных данных:
|
11 |
12 |
45 |
5 |
3 |
17 |
23 |
21 |
20 |
19 |
18 |
17 |
Программа должна вывести одно число – описанное в условии произведение либо –1, если получить такое произведение не удаётся. Пример выходных данных для приведённого выше примера входных данных: 54
Выбираем Б.
Отметим, что программа похожа по ходу своего решения на первую задачу из 7 части цикла статей. По аналогии создаем массив из такого количества элементов, какой требуется минимальный минут промежуток. Далее заполняем массив первыми шестью элементами последовательности. Затем для всех последующих чисел – с 1 по последнее – найдем минимальное четное и второй минимум среди оставшихся чисел, такой, что промежуток между первым и вторым минимумами не менее 6. Для соблюдения промежутка будем делать постепенный сдвиг массива.
program minimumevenamountoftwonumberswithintervalsixminutes;
var
a:array[1..6]of integer;
AmountOfNumbers, FirstIndex, SecondIndex, MinimumEvenMultiolyOfTwoNumbers,
InputNumber, FirstMinimumNumber, SecondMinimumNumber, temporary:integer;
begin
writeln('Введите количество чисел в последовательности = ');
readln(Amountofnumbers);
for FirstIndex := 1 to 6 do
begin
writeln('Введите число = ');
readln(a[FirstIndex]);
end;
FirstMinimumNumber := 1001;
SecondMinimumNumber := 1001;
MinimumEvenMultiolyOfTwoNumbers := FirstMinimumNumber*SecondMinimumNumber;
for FirstIndex := 7 to AmountOfNumbers do
begin
writeln('Введите число = ');
readln(InputNumber);
if a[1]<FirstMinimumNumber then
FirstMinimumNumber := a[1];
if (a[1] mod 2 = 0) and (a[1] < SecondMinimumNumber) then
SecondMinimumNumber := a[1];
if InputNumber mod 2 = 0 then
temporary := InputNumber*FirstMinimumNumber
else if
Вступайте в нашу телеграмм-группу Инфостарт