На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rust
  
> ЕГЭ по информатике 2020, часть 2, № 25, Алгоритм обработки массивов
    ЕГЭ по информатике 2020, вариант Москва
    Часть 2, № 25
    Алгоритм обработки массивов
    Задание взято с сайта
    http://kotolis.ru/realegeinf_2020

    user posted image

    Условие.
    Дан массив, содержащий 2020 положительных целых чисел, от -10000 до 10000. Необходимо найти наибольший кратный 4 элемент этого массива. После чего в массиве изменить все элементы кратные 4 на это значение и вывести массив.
    Напишите на одном из языков программирования программу для решения этой задачи. В качестве результата программа должна вывести изменённый массив, по одному элементу в строке. Например, для исходного массива из 5 элементов 112 4 27 95 148 программа должна вывести числа 4 4 27 95 4 по одному числу в строке.
    Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных
    В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).

    Замечание.
    Очень простая задача с довольно странным условием, в котором целые положительные числа начинаются от -10000.
    Не будем обращать внимание на эти странности, будем делать точно по условию.
    Кроме того, раз уж такая простая задача попала в часть 2, сделаем её чуть более рационально, чем на сайте. Без использования дополнительных переменных.

    Решение.
    Программа на Паскале:
    ExpandedWrap disabled
      const N = 2020;
      var a: array [1..N] of integer;
      i, k, m: integer;
      begin
          for i:= 1 to N do
             readln(a[i]);
             ...
      end.


    Алгоритм
    1. Инициализация.
    Пусть в переменной k будет храниться максимальный элемент массива, кратный 4. Поскольку 0 не является положительным числом, первоначально положим k:= 0.

    2. Поиск максимального элемента
    Во время чтения элементов массива будем проверять, выполняется ли условие делимости на 4, если оно выполнено, то проверять, не нашли ли мы элемент больший k.

    3. Вывод массива на печать
    Если после завершения цикла значение k осталось равным 0, то массив не изменился. Печатаем массив a.
    Иначе в цикле опять проверяем для каждого элемента массива условие делимости на 4, и, если условие выполнено, присваиваем этому элементу значение k и затем печатаем.

    ExpandedWrap disabled
      const N = 2020;
      var a: array [1..N] of integer;
      i, k, m: integer;
       
      begin
          k:= 0;
          for i:= 1 to N do begin
             readln(a[i]);
             if (a[i] mod 4 = 0) then
                if a[i] > k then k:= a[i];
          end;
          
          if k = 0 then
             for i:= 1 to n do writeln(a[i])
          else
             for i:= 1 to n do begin
                if a[i] mod 4 = 0 then a[i]:= k;
                writeln(a[i])
             end;
      end.
    Сообщение отредактировано: swf -
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script execution time: 0,0168 ]   [ 16 queries used ]   [ Generated: 25.07.21, 04:12 GMT ]