Дан массив, содержащий 2016 целых чисел. Необходимо найти и вывести сумму тех элементов этого массива, чётность которых совпадает с чётностью максимального элемента.
Например, в массиве из 6 элементов, равных соответственно 2, 3, 1, 5, 6, 4, максимальный элемент чётный (6), значит, ответом будет сумма чётных элементов этого массива 2 + 6 + 4 = 12.
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
| Бейсик | Python |
|---|---|
CONST N=2016 DIM A(N) AS INTEGER DIM I, M, S, P AS INTEGER FOR I = 1 TO N INPUT A(I) NEXT I … END
| # допускается также использо- # вание целочисленной # переменной m, s, p a = [] N = 2016 for i in range(0, N): a.append(int(input())) …
|
| Паскаль | Алгоритмический язык |
const N=2016; var a: array [1..N] of integer; i, m, s, p: integer; begin for i:=1 to N do readln(a[i]); … end.
| алг нач цел N=2016 целтаб a[1:N] цел i, m, s, p нц для i от 1 до N ввод a[i] кц … кон |
| Си++ | |
#include <iostream> using namespace std; #define N 2016 int main(){ int a[N]; int i, m, s, p; for (i=0; i < N; i++) cin >> a[i]; … return 0; }
| |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Чтобы получить ответ за один просмотр всех элементов массива, необходимо подсчитать суммы чётных и нечётных элементов, а также определить максимум, после чего выбрать нужную сумму в зависимости от чётности максимума.
Допустимо и двухпроходное решение: на первом проходе определяется максимум, а на втором вычисляется нужная сумма. Ниже продемонстрированы оба способа решения.
Пример правильной программы на языке Паскаль (способ 1)
s:=0; p:=0;
m:=a[1];
for i:=1 to N do begin
if a[i]>m then m:=a[i];
if a[i] mod 2 = 0
then s := s + a[i]
else p := p + a[i];
end;
if m mod 2 = 0
then writeln(s)
else writeln(p)
Пример правильной программы на языке Паскаль (способ 2)
m:=a[1];
for i:=2 to N do begin
if a[i]>m then m:=a[i]
end;
s:=0;
for i:=1 to N do begin
if abs(a[i] mod 2) = abs(m mod 2)
then s := s + a[i]
end;
writeln(s)

