Найти сумму элементов между минимальным и максимальным элементами массива

Задача

В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами. Сами минимальный и максимальный элементы в сумму не включать.

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

  1. Сначала надо найти минимальный и максимальный элементы массива. Это можно сделать в цикле заполнения массива. Причем лучше запоминать в переменных не сами значения элементов, а их индексы.
  2. Поскольку неизвестно, какой из элементов (минимальный или максимальный) встречается в массиве раньше, то неизвестно, как в последующем делать перебор участка массива: от начала этого участка к его концу или от конца к началу. Данную проблему можно решить путем обмена значений переменных, если, например, переменная, содержащая индекс минимума, окажется больше содержащей индекс максимума.
  3. До подсчета суммы элементов, находящихся между минимумом и максимумом, следует переменной (например, sum) присвоить 0. Далее перебираем в цикле for массив от следующего за минимумом элемента до элемента предшествующего максимуму. Для этого к первой переменной прибавляем 1, а из второй вычитаем 1. В теле цикла к значению sum добавляем значение текущего элемента массива.

Примечание. Если минимумов или максимумов оказывается несколько, то программа находит сумму только между первыми из них.

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

const
    N = 10;
var
    arr: array[1..N] of integer;
    i, min, max: byte;
    sum: integer;
begin
    randomize;
    for i := 1 to N do begin
        arr[i] := random(50);
        write (arr[i]:3);
    end;
    writeln;
   
    min := 1;
    max := 1;
    for i := 2 to N do begin
        if arr[i] < arr[min] then min := i else
        if arr[i] > arr[max] then max := i;
    end;
    writeln(arr[min],' ',arr[max]);
   
    if min > max then begin
        i := min;
        min := max;
        max := i;
    end;
   
    sum := 0;
    for i:=min+1 to max-1 do begin
        sum := sum + arr[i]
    end;
    writeln(sum);
end.

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

 25 20 20 20 24 48 40 24 46 16
16 48
110

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

#include <stdio.h>
#define N 10

main() {
    int a[N], i, min, max, sum;
    srand(time(NULL));
    for (i=0; i<N; i++) {
        a[i] = rand()%50;
        printf("%3d", a[i]);
    }
    printf("\n");

    min = 0;
    max = 0;
    for (i=1; i < N; i++) {
        if (a[i] < a[min]) min = i;
        else if (a[i] > a[max]) max = i;
    }
    printf("%3d, %3d\n", a[min], a[max]);
   
    if (min > max) {
        i = min;
        min = max;
        max = i;
    }
   
    sum = 0;
    for (i=min+1; i<max; i++)
        sum += a[i];
    printf("%4d\n", sum);
}

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

 39 21 12 14 24 37 33 46 38 22
 12,  46
 108

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

from random import random

N = 10
a = [0]*N
for i in range(N):
    a[i] = int(random()*50)
    print('%3d' % a[i], end='')
print()

min_id = 0
max_id = 0
for i in range(1,N):
    if a[i] < a[min_id]:
        min_id = i
    elif a[i] > a[max_id]:
        max_id = i
print(a[min_id], a[max_id])

if min_id > max_id:
    min_id, max_id = max_id, min_id

summa = 0
for i in range(min_id+1, max_id):
    summa += a[i]
print(summa)

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

 10  5  8 14 16 42 18 33  2 32
2 42
51

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

Поиск индексов минимального и максимального элементов можно было выполнить так:

min_id = a.index(min(a))
max_id = a.index(max(a))

Здесь встроенные функции min() и max() языка Python находят соответственно минимальный и максимальный элементы списка. А метод списка index() определяет индекс (номер) переданного в качестве аргумента элемента.

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

алг сумма между
нач
    цел N = 10
    цел таб arr[1:N]
    цел i, mini, maxi, sum
    нц для i от 1 до N
         arr[i] := irand(0,50)
         вывод arr[i]:3
    кц
    вывод нс

    mini := 1
    maxi := 1
    нц для i от 2 до N
        если arr[i] < arr[mini] то
            mini := i
          иначе
              если arr[i] > arr[maxi] то
                  maxi := i
              все
        все
    кц
    вывод arr[mini]:3, arr[maxi]:3, нс

    если mini > maxi то
        i := mini
        mini := maxi
        maxi := i
    все

    sum := 0
    нц для i от mini+1 до maxi-1
        sum := sum + arr[i]
    кц
    вывод sum, нс
кон

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

 26  6 35 35 36 25 39 22  5  1
  1 39
27

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

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

min = 0
max = 0
for i=1 to N-1
        if arr[i] < arr[min] then min = i
        if arr[i] > arr[max] then max = i
next i
print arr[min] + "  " + arr[max]

if min > max then
        i = min
        min = max
        max = i
endif

sum = 0
for i=min+1 to max-1
        sum = sum + arr[i]
next i
print sum

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

28  16  16  33  32  17  1  17  3  17  
1  33
49

Тема

Массивы

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

Средний

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