Общие указания. 1. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы. 2. Эффективность алгоритма не имеет значения и не оценивается. 3. Допускается запись алгоритма на языке программирования, отличном от языков, перечисленных в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных в приведенных фрагментах. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования; при этом количество переменных и их идентификаторы должны соответствовать условию задачи.
Критерии оценивания выполнения задания | Баллы |
Предложен правильный алгоритм, выдающий верное значение. | |
Не выполнены условия, позволяющие поставить 2 балла. Предложено в целом верное решение, содержащее не более одной ошибки из числа следующих. 1. Отсутствие инициализации или неверная инициализация одной или нескольких переменных (например, инициализация максимума первым элементом без учёта чётности). 2. Ошибка в сравнениях, в результате которой выводится минимум вместо максимума или максимум меньшей группы вместо большей. 3. Использование строгого сравнения вместо нестрогого или наоборот. 4. Ошибка при определении чётности элементов, в том числе проверка на чётность индекса вместо элемента. 5. Отсутствует вывод ответа. 6. Используется переменная, не объявленная в разделе описания переменных. 7. Индексная переменная в цикле не меняется (например, в цикле while) или меняется неверно. | |
Не выполнены условия, позволяющие поставить 1 или 2 балла. Например, ошибок, перечисленных в п. 1–11, две или больше, или алгоритм сформулирован неверно. | |
Максимальный балл |
Дан массив, содержащий неотрицательные целые числа. Необходимо вывести:
|
|
- максимальный чётный элемент, если количество чётных элементов не меньше, чем нечётных;
- максимальный нечётный элемент, если количество нечётных элементов больше, чем чётных.
Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 3, 8, ответом будет 12 — наибольшее чётное число, поскольку чётных чисел в этом массиве больше.
|
|
Напишите на одном из языков программирования программу для решения этой задачи. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных переменных.
Паскаль |
const N=2000; var a: array [1..N] of integer; i, j, k, m: integer; begin for i:=1 to N do readln(a[i]); … end. |
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.
Пояснение.
Чтобы за один проход определить количество чётных и нечётных элементов и соответствующие им максимумы, нужны 5 переменных (два счётчика, два максимума и индекс), а в условии разрешено использовать только 4. Чтобы обойти это ограничение, заметим, что, поскольку общее количество элементов известно, можно подсчитывать количество только в одной группе. Эта идея реализована в следующем фрагменте на языке Паскаль.
Возможно также двухпроходное решение: на первом проходе определяется количество чётных и нечётных элементов, на втором определяется максимум в соответствующей группе. Эта идея реализована в следующем фрагменте на алгоритмическом языке.
Паскаль |
j:=0; k:=0; m:=0; for i:=1 to N do begin if a[i] mod 2 = 0 then begin j:=j+1; if a[i]>k then k:=a[i]; end else if a[i]>m then m:=a[i]; end; if j>=n-j then writeln(k) else writeln(m); |