Дан массив, содержащий 70 неотрицательных целых чисел. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести наименьшую чётную сумму двух соседних элементов массива. Гарантируется, что в массиве есть соседние элементы с чётной суммой. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
| Паскаль | Бейсик |
|---|---|
const N=70; var a: array [1..N] of integer; i, j, x, у: integer; begin for i: 1 to N do readln(a[i]); ... end. | N=70 DIM A(N) AS INTEGER DIM I, J, X, Y AS INTEGER FOR I=1 TO N INPUT A(I) NEXT I ... END |
| Си++ | Алгоритмический язык |
#include <iostream> using namespace std; #define N 70 int main(){ int a[N]; int i, j , x, y; for (i = 0; i < N; i++) cin >> a[i]; ... } | алг нач цел N=70 целтаб а[1:N] цел i, j, х, у нц для i от 1 до N ввод а[i] кц ... кон |
| Python | |
# допускается также # использовать три # целочисленные переменные j, x, y a = [] n = 70 for i in range(0, n): a.append(int(input())) ... | |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.4) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Пример программы на Паскале:
у:=1;
for i:= 1 to N−1 do begin
x:= a[i]+a[i+1];
if (x mod 2=0) and ((у=1) or (x < y)
then y:= x;
end;
writeln(y);
Допускается использование других приёмов программирования, приводящих к верному результату.
В частности, разрешается использовать следующие способы:
1. Отказ от использования отдельной переменной для суммы двух элементов. В этом случае сумма может вычисляться повторно:
if (a[i] mod 2 <> a[i+l] mod 2) and (a[i]+a[i+1]>y) then у:=a[i]+a[i+1];
2. Проверка несовпадения чётности полным перебором вариантов:
if ( (а [ i] mod 2 = 0) and (a[i + l] mod 2 = 1) or
(a[i] mod 2 = 1) and (a [i + 1] mod 2 = 0)) and (a[i] +a[i + 1]>y)
3. Проверка несовпадения чётности по чётности суммы:
if (х mod 2=1) and (х>у)
4. Использование вложенных условных операторов вместо составного условия:
if (a[i] mod 2 <> a[i+l] mod 2) then if x>y then y:=x;
Допускаются и другие вариации при условии, что они соответствуют указанным в условии ограничениям и приводят к правильному ответу.

