Максимальный из элементов массива с четными индексами

Задача

В массиве найти максимальный элемент с четным индексом.

Другая формулировка задачи: среди элементов массива с четными индексами, найти тот, который имеет максимальное значение.

Пояснение к задаче и алгоритм решения

В различных языках программирования индексация элементов выполняется по-разному. В одних первый элемент имеет индекс 1 (например, в Паскале и КуМире), в других - 0 (Python, C, Basic).

Таким образом, в одних языках элементами с четными индексами будут второй, четвертый, шестой и т. д. В других языках четные индексы будут у первого, третьего, пятого и т. д. элементов.

Для поиска максимума только среди четных (или среди нечетных) индексов необходимо при переборе массива в цикле использовать шаг, равный 2.

Предположим, что первый элемент с четным индексом и есть максимальный. Присвоим его индекс переменной max. Перебор начнем с индекса i = max + 2 до конца массива (N).

В цикле будем сравнивать значение очередного элемента со значением элемента по индексу max. Если текущий элемент больше, то запишем его индекс в max.

 

Исходный код на языке программирования Pascal

const N = 10;
var
    a: array[1..N] of integer;
    i, max: byte;

begin
    randomize;
    for i:=1 to N do a[i]:=random(100);
    for i:=1 to N do write(a[i]:3);
    writeln;
    max := 2;
    i := 4;
    while i <= N do begin
        if a[i] > a[max] then
            max := i;
        i := i + 2;
    end;
    writeln('№ ',max,' = ',a[max]);
end.

Пример(ы) выполнения программы на языке Pascal

 28 45 48 10  1 85 47 53 32 36
6 = 85

Особенности решения на языке программирования Pascal

В языке Pascal цикл for не имеет шага, поэтому при решении данной задачи используется цикл while, в теле которого счетчик i увеличивается на 2.

Задачу можно решить через цикл for, предусмотрев в его теле проверку индекса элемента на четность (например так: if odd(i) = false then ... ).

Исходный код на языке программирования C

#include <stdio.h>
#define N 10

main() {
    int a[N];
    int i, max;
    for (i=0; i<N; i++) { // просто вывод индексов
        printf("%3d", i);
    }
    printf("\n");
    srand(time(NULL));
    for (i=0; i<N; i++) {
        a[i] = rand() % 100;
        printf("%3d", a[i]);
    }
    printf("\n");
   
    max = 0;
    for (i=2; i<N; i+=2)
        if (a[i] > a[max]) max = i;
    printf("%d: %d\n",max,a[max]);
}

Пример(ы) выполнения программы на языке C

  0  1  2  3  4  5  6  7  8  9
 37 81 23 91 66 36 59  6 25 57
4: 66

Исходный код на языке программирования Python

from random import random
N = 10
arr = [0] * N
for i in range(N):
    arr[i] = int(random() * 100)
print(arr)
m = 0
for i in range(2,N,2):
    if arr[i] > arr[m]:
        m = i
print(m,'-',arr[m])

Пример(ы) выполнения программы на языке Python

[42, 25, 94, 79, 86, 51, 99, 70, 74, 25]
6 - 99

Исходный код на языке программирования КуМир

алг макс с чет индексами
нач
  цел N = 10
  цел таб arr[1:N]
  цел i,m
  нц для i от 1 до N
    arr[i] := irand(10,99)
    вывод arr[i]:3
  кц
  вывод нс

  m := 2
  нц для i от 4 до N шаг 2
    если arr[i] > arr[m] то
      m := i
    все
  кц
  вывод m,'-', arr[m]
кон

Пример(ы) выполнения программы на языке КуМир

 69 30 80 54 55 82 64 85 34 77
8-85

Исходный код на языке программирования Basic

N = 10
dim arr(N)
for i=0 to N-1
    arr[i] = int(rand*100)
    print arr[i] + " ";
next i
print

m = 0
for i=2 to N-1 step 2
        if arr[i] > arr[m] then
                m = i
        endif
next i
print m+"-"+arr[m]

Пример(ы) выполнения программы на языке Basic

49 12 1 37 96 47 70 1 5 66
4-96

Тема

Массивы

Уровень сложности

Простой

Дата публикации