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

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

  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.




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

Язык Си

#include
#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);
}



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)



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

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

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-256

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



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

Оцените статью
Добавить комментарий