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




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

Дан массив, содержащий неотрицательные целые числа, не превышающие 10 000. В массиве пристутствуют чётные и нечётные числа. Необходимо вывести:

- минимальный чётный элемент, если количество чётных элементов не больше, чем нечётных;

- минимальный нечётный элемент, если количество нечётных элементов меньше, чем чётных.

Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 9, 8, ответом будет 9 — наименьшее нечётное число, поскольку нечётных чисел в этом массиве меньше.

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

 

БейсикПаскаль

CONST N=2000

DIM A(N) AS INTEGER

DIM I, J, K, M AS INTEGER

FOR I = 1 TO N

INPUT A(I)

NEXT I

END

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.

Си++Алгоритмический язык

#include <iostream>

using namespace std;

#define N 2000

int main(){

int a[N];

int i, j, k, m;

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

cin >> a[i];

return 0;

}

алг

нач

цел N=2000 | Изменять значение
этой переменной нельзя

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

цел i, j, k, m

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

ввод a[i]

кц

кон

Python

// допускается также использовать

// целочисленные переменные j, k, m

a = []

N = 2000 // менять значение N нельзя

for i in range(0, n):

a.append(int(input()))

 

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

Решение.

Чтобы за один проход определить количество чётных и нечётных элементов и соответствующие им минимумы, нужны 5 переменных (два счётчика, два минимума и индекс), а в условии разрешено использовать только 4. Чтобы обойти это ограничение, заметим, что, поскольку общее количество элементов известно, можно подсчитывать количество только в одной группе. Эта идея реализована в следующем фрагменте на языке Паскаль.

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

Паскаль

j:=0; k:=10001; m:=10001;

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);

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

j:=0; k:=0

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

если mod(a[i],2)=0

то j:=j+1

иначе k:=k+1

все

кц

если j <=k

то j:=0

иначе j:=1

все

m:=10001

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

если mod(a[i],2) = j

то m := imin(m,a[i])

все

кц

вывод m