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




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

Дан массив, содержащий 2019 положительных целых чисел, не превышающих 15 000. Необходимо найти сумму минимального чётного и минимального нечётного элементов (если в массиве нет чётных или нечётных элементов, соответствующий минимум считается равным нулю), уменьшить все элементы, которые больше этой суммы, на её значение и вывести изменённый массив. Например, для исходного массива из пяти элементов — 30, 99, 27, 90, 66 — программа должна вывести числа 30, 42, 27, 33, 9 (сумма минимумов равна 57, все элементы, большие 57, уменьшены на 57).

Напишите на одном из языков программирования программу для решения этой задачи.

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

 

БейсикPython

CONST N=2019

DIM A(N) AS INTEGER

DIM I, K, M AS INTEGER

FOR I = 1 TO N

    INPUT A(I)

NEXT I

END

# кроме уже указанных

# допускается использование

# целочисленных переменных

# k, m

a = []

n = 2019

for i in range(0, n):

    a.append(int(input()))

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

const

    N=2019;

var

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

    i, k, m: integer;

begin

    for i:=1 to N do

        readln(a[i]);

    …

end.

алг

нач

    цел N=2019

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

    цел i, k, m

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

        ввод a[i]

    кц

    …

кон

С++

#include <iostream>

using namespace std;

const int N=2019;

    int main(){

    int a[N];

    int i, k, m;

    for (i=0; i<N; ++i)

        cin >> a[i];

    …

    return 0;

}

 

 

 

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

Решение.

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

 

Пример правильной программы на языке Паскаль:

 

Паскаль

m := 15001; k:=15001;

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 > 15000 then m := 0;

if k > 15000 then k := 0;

m := m + k;

for i:=1 to N do begin

    if a[i] > m then a[i] := a[i] – m;

    writeln(a[i])

end;

 

При использовании языка Python первый проход можно записать в одну строку, используя функцию min. При этом обязательно нужно использовать параметр default (доступен, начиная с версии Python 3.4) или другим способом обеспечить обработку ситуации, когда в массиве нет чётных или нечётных элементов

 

Python

m = min((k for k in a if k%2 == 0), default = 0) + \

    min((k for k in a if k%2 == 1), default = 0)

for i in range(0,N):

    if a[i] > m:

        a[i] -= m

    print(a[i])

 

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