Задача к ЕГЭ по информатике на тему «максимум/минимум» №5

Дан целочисленный массив из N  = 30  элементов. Элементы массива различны и могут принимать значения от -15000 до 15000. Опишите на одном из языков программирования алгоритм, который находит и выводит количество элементов, которые по модулю больше максимального.

Например, для исходного массива из 6 элементов

4

-5

3

-7

2

-9

программа должна вывести

3

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

|Б-ейсик-------------------------|P-ython-----------------------------|Ал-горитм-ическ-ий-язы-к-| |--------------------------------|------------------------------------|-------------------------| |CON   ST N ASIN  T EGER   =  30 |#  допуск ается такж е              |алг                      | |DIM   A(0T ON  − 1 )ASLON    G   |#  испол ьзовать три                |нач                      | |DIM   IASLON   G                |# цело числен ные пер еменн ые i,t,k |  целN  =  30            | |     TASLON    G                |a = []                              |  цел табa[0 : N − 1 ]   | |                                |                                    |                         | |     KASLON    G                |n = 30                              |  целi,t,k               | |F ORI  = 0T ON   − 1            |foriinrange (0,n ) :                |  нц д ляiот0доN  − 1    | |     IN PU T A (I )              |  a.append (int(input ()))           |    вв одa[i]             | |N EXT   I                       |...                                  |  кц                     | |...                              |                                    |...                       | |                                |                                    |                         | -EN--D-----------------------------------------------------------------кон----------------------|

|--------------------------------|------------------------------------| |-П-аскаль-----------------------|C-+-+-------------------------------| |const                           |#include  < iostream  >             | |                                |                                    | |  N  =  30                      |usingnamespacestd;                  | |var                             |constintN  = 30;                    | |  a : array[0..N  − 1]oflongint; |intmain (){                         | |  i,t,k : longint;              |longa[N ];                          | |begin                           |longi,t,k;                          | |                                |                                    | |  f ori := 0toN − 1do           |for(i = 0;i < N ;i + +)cin > > a[i]; | |     readln(a[i]);               |…                                  | |…                              |return0;                            | |end.                            |}                                   | ———————————————————————- » class=»math-display» width=»auto»></center> </p>
<p class= В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в приведённых фрагментах.

Найдем максимальный элемент массива. Текущий максимальный элемент будем хранить в k  . Предположим, что первый элемент является максимальным, то есть k = a[0]  . В цикле f or  от 0 до      N  будем сравнивать k  и a[i]  . Если элемент оказался больше текущего максимума, то мы обновим   k  (ведь мы нашли новый максимум). После того, как мы выйдем из цикла, в k  будет храниться максимальный элемент массива.

Положительные элементы всегда меньше максимума (если максимум — положительное число, то другой положительный элемент будет меньше максимума. Если максимум — это отрицательное число, то среди элементов массива нет положительных или равных нулю чисел). Тогда надо рассматривать только неположительные элементы. Будем сравнивать их по модулю с максимальным (так как, например, -6 по модулю больше, чем 4). Если элемент оказался больше, чем максимальный, то увеличим счетчик таких элементов на 1.

В качестве счетчика будет переменная t  . Изначально приравняем ее к нулю.

В цикле for  от 0 до N  будем перебирать элементы массива. Так как дополнительные библиотеки подключать нельзя, сравнивать по модулю будем так: если элемент отрицательный, то изменим его знак на противоположный (так элемент станет положительным) и сравним с максимумом. Как уже было сказано, если он оказался больше максимума, увеличим t  на 1. Положительные элементы сравнивать не надо. Вне цикла выведем t  — количество элементов, которые по модулю больше максимума.

Пример на C  + +  (с комментариями):

t = 0, k = 0;

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

if (a[i] > k)k = a[i];  » class=»math» width=»auto»> //находим максимум </p>
<p class= for(i = 0;i < N ;i + + ){

if(a[i] < 0){ //если элемент оказался отрицательным

a[i] = − a[i];  //меняем знак на противоположный

if(a[i] > k)t + +;  » class=»math» width=»auto»> //и если он оказался больше максимума, увеличим счетчик </p>
<p class= }

}

cout < < t;

Ответ: См.решение
Оцените статью
Я решу все!