максимальное чётное произведение двух показаний, между моментами передачи
Последовательность На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передаёт по каналу связи неотрицательное целое число – количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной
серии показаний прибора максимальное чётное произведение двух показаний, между моментами передачи которых прошло не менее 9 минут.
Если получить такое произведение не удаётся, ответ считается равным –1.
Количество энергии, получаемое прибором за минуту, не превышает 1000 условных единиц. Общее количество показаний прибора в серии не превышает 10 000.
Задача А. Напишите программу для решения поставленной задачи, в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов. Максимальная оценка за выполнение задания А – 2 балла.
Задача Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).
Входные данные представлены следующим образом. В первой строке задаётся число N – общее количество показаний прибора. Гарантируется, что N > 9. В каждой из следующих N строк задаётся одно положительное
целое число – очередное показание прибора.
Пример входных данных:
11
12
45
5
3
17
23
21
20
19
12
26
Программа должна вывести одно число – описанное в условии произведение либо –1, если получить такое произведение не удаётся.
Пример выходных данных для приведённого выше примера входных данных: 1170
Решение:
Задача А. (2б)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const d = 9; var N: integer; a: array[1..10000] of integer; i, j, max: integer; begin readln(N); for i:=1 to N do read(a[i]); max:= -1; for i:= 1 to N-d do for j:= i+d to N do if (a[i]*a[j] mod 2 = 0) and (a[i]*a[j] > max) then max := a[i]*a[j]; writeln(max) end. |
Задача Б. (4б)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
const d = 9; var N: integer; a: array[0..d-1] of integer; max, m, mEven, x, j, i: integer; begin readln(N); for j:=0 to d-1 do read(a[j]); max:= -1; m:= -1; mEven:= -1; for j:= d to N-1 do begin read(x); if ((a[j mod d] mod 2 = 0) and (a[j mod d] > mEven)) then mEven:= a[j mod d]; if (a[j mod d] > m) then m := a[j mod d]; if x mod 2 = 1 then begin if x*mEven > max then max := mEven*x; end else if x*m > max then max := m*x; a[j mod d]:=x; end; writeln(max) end. |