СДАМ ГИА: РЕШУ ЕГЭ
Образовательный портал для подготовки к экзаменам
Информатика
≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 25 № 11254

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

Например, в массиве из шести элементов, равных соответственно 2, 3, 1, 5, 6, 4, произведение всех элементов чётно, значит, ответом будет максимальный чётный элемент, то есть 6.

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

 

 

БейсикPython

CONST N=2016

DIM A(N) AS INTEGER

DIM I, M, K AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленных

# переменных m, k

a = []

N = 2016

for i in range(0, N):

a.append(int(input()))

Алгоритмический языкПаскаль

алг

нач

    цел N=2016

    целтаб a[1:N]

    цел i, m, k

    нц для i от 1 до N

        ввод a[i]

    кц

    …

кон

const

    N=2016;

var

    a: array [1..N] of integer;

    i, m, k: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

Си++

#include <iostream>

using namespace std;

#define N 2016

int main(){

    int a[N];

    int i, m, k;

    for (i=0; i        cin >> a[i];

    …

    return 0;

}

 

 

В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

Решение.

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

 

Пример правильной программы на языке Паскаль (способ 1)

m:=0; k:=0;

for i:=1 to N do begin

    if (a[i] mod 2 = 0) and (a[i]>m)

        then m := a[i];

    if (a[i] mod 2 = 1) and (a[i]>k)

    then k := a[i];

end;

if m > 0

    then writeln(m)

    else writeln(k)

 

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

 

Пример правильной программы на языке Паскаль (способ 2)

m:=a[1];

  for i:=2 to N do begin

  if (a[i] mod 2 = m mod 2) and (a[i] > m) or

    (a[i] mod 2 = 0) and (m mod 2 = 1)

   then m := a[i];

end;

writeln(m)