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


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

Дан массив, содержащий 2016 неотрицательных целых чисел. Необходимо найти в этом массиве количество таких элементов, которые равны среднему арифметическому двух элементов, расположенных непосредственно перед ним. Например, в массиве из 6 элементов, равных соответственно 4, 6, 5, 1, 3, 2, есть три таких элемента, они расположены на третьем, пятом и шестом месте и равны 5, 3 и 2.

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

 

БейсикPython

CONST N=2016

DIM A(N) AS INTEGER

DIM I, K AS INTEGER

FOR I = 1 TO N

  INPUT A(I)

NEXT I

END

# допускается также использо-

# вание целочисленной

# переменной k

a = []

N = 2016

for i in range(0, N):

  a.append(int(input()))

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

const

  N=2016;

var

  a: array [1..N] of integer;

  i, k: integer;

begin

  for i:=1 to N do

    readln(a[i]);

  …

end.

алг

нач

  цел N=2016

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

  цел i, k

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

    ввод a[i]

  кц

кон

Си

#include <iostream>

using namespace std;

#define N 2016

int main(){

  int a[N];

  int i, k;

  for (i=0; i    cin >> a[i];

  …

  return 0;

}

 

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

Решение.

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

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

 

Пример правильной программы на языке Паскаль (способ 1)

k:=0;

for i:=3 to N do begin

  if 2*a[i] = a[i-1] + a[i-2]

    then k := k+1;

end;

writeln(k)

 

Пример правильной программы на языке Паскаль (способ 2)

k:=0;

for i:=3 to N do begin

  if ((a[i-1] + a[i-2]) mod 2 = 0) and

      ((a[i-1] + a[i-2]) div 2 = a[i])

  then k := k+1;

end;

writeln(k)


Аналоги к заданию № 10301: 10328 Все