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


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

По каналу связи передаются положительные целые числа, не превышающие 1000, – результаты измерений, полученных в ходе эксперимента (количество измерений известно заранее). После окончания эксперимента передаётся контрольное значение – наименьшее число R, удовлетворяющее следующим условиям:

 

1) R — сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа, суммы различных, но равных по величине элементов допускаются);

2) R — нечётное число.

 

Если чисел, соответствующих приведённым условиям, нет, считается, что R = –1. В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

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

 

Вычисленное контрольное значение: …

Контроль пройден (или Контроль не пройден)

 

Если удовлетворяющее условию контрольное значение определить невозможно (то есть R = –1), то выводится только фраза «Контроль не пройден».

Перед текстом программы кратко опишите используемый Вами алгоритм решения.

На вход программе в первой строке подаётся количество чисел N. В каждой из последующих N строк записано одно натуральное число, не превышающее 1000. В последней строке записано контрольное значение.

 

Пример входных данных:

 

6

10

8

33

45

19

200

27

 

Пример выходных данных для приведённого выше примера входных данных:

Вычисленное контрольное значение: 27

Контроль пройден

Решение.

Сумма двух чисел нечётна, если одно из них — чётное, а другое — нечётное. Программа, вычисляющая контрольное значение, читает все входные данные один раз, не запоминая их в массиве. Для прочитанного фрагмента входной последовательности программа хранит значения двух величин: М0 — наименьшее чётное число;

M1 — наименьшее нечётное число. После того как все данные прочитаны, искомое контрольное значение вычисляется как сумма M0 + M1.

Ниже приведены реализующие этот алгоритм программы на языке Паскаль, а также на алгоритмическом языке. Допускаются решения, записанные на других языках программирования.

 

Пример правильной и эффективной программы на языке Паскаль.

 

var M0,M1,res,i,N,dat: longint;

begin

M0 := 1002;

M1 := 1001;

readln(N);

for i := 1 to N do

begin

readln(dat);

if (dat mod 2 = 0) and (dat < M0) then

M0 := dat;

if (dat mod 2 <> 0) and (dat < M1) then

M1 := dat;

end;

if (M0 <= 1000) and (M1 <= 1000) then

res := M0+M1

else res := -1;

readln(R);

if res > 0 then

writeln('Вычисленное контрольное значение: ',res);

if (R > 0) and (R = res)

then writeln('Контроль пройден')

else writeln('Контроль не пройден');

end.

 

Пример правильной и эффективной программы на Алгоритмическом языке.

 

алг

нач

цел N | количество чисел на входе

цел x | исходные данные

цел m0=1002 | миним. четное число

цел m1=1001 | миним. нечетное число,

цел R | введенное контрольное значение

цел res | вычисленное контрольное значение

ввод N

нц N раз

ввод x

если mod(x,2) = 0 и x < m0

то m0 := x

все

если mod(x,2) <> 0 и x < m1

то m1 := x

все

кц

если m0 <= 1000 и m1 <= 1000 то

res := m0+m1

иначе

res := -1

все

ввод R

если res>0

вывод нс, 'Вычисленное контрольное значение: ',res

все

если R>0 и R=res

то вывод нс, "Контроль пройден"

иначе вывод нс, "Контроль не пройден"

все

кон

 

Приводим эффективное решение Игоря Кудашева на Python 3.

n = int(input())

x1 = 1001

x2 = 1001

for i in range(n):

    x = int(input())

    if x % 2 != 0 and x < x1: x1 = x

    elif x % 2 == 0 and x < x2: x2 = x

r = int(input())

if x1 == 1001 or x2 == 1001: r1 = -1

else: r1 = x1 + x2

print('Вычисленное контрольное значение:', r1)

if r == r1: print('Контроль пройден')

else: print('Контроль не пройден')


Аналоги к заданию № 7684: 7711 7938 8003 Все