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


Задания
Версия для печати и копирования в 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)