Тип Д25 C2 № 5224 
Алгоритмы обработки массивов. Другие алгоритмы
i
Дан массив, содержащий 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;
Допускаются и другие вариации при условии, что они соответствуют указанным в условии ограничениям и приводят к правильному ответу.
Критерии проверки:| Критерии оценивания выполнения задания | Баллы |
|---|
| Предложен правильный алгоритм, выдающий верное значение. Допускается запись алгоритма на другом языке, использующая аналогичные переменные. В случае, если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на языках, использованных в задании. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования, при этом количество переменных и их идентификаторы должны соответствовать условию задачи. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы | 2 |
| Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих: 1) Не инициализируется или неверно инициализируется текущее значение минимума. В частности, нельзя инициализировать это значение суммой двух первых элементов массива. 2) Неверно проверяется чётность элементов или совпадение чётности. 3) В сложном логическом условии простые проверки верны, но условие в целом построено неверно (например, перепутаны операции И и ИЛИ, неверно расставлены скобки в логическом выражении). 4) Вместо значения элемента проверяется его индекс. 5) Отсутствует вывод ответа. 6) Используется переменная, не объявленная в разделе описания переменных. 7) Не указано или неверно указано условие завершения цикла, например, используется цикл от 1 до N, и при обращении к элементу a[i+1] происходит выход за границы массива. 8) Индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно | 1 |
| Не выполнены условия, позволяющие поставить 1 или 2 балла | 0 |
| Максимальный балл | 2 |