Задача — Найти сумму элементов между минимальным и максимальным элементами массива
— программирование на Pascal, Си, Кумир, Basic-256, Python
В одномерном массиве найти сумму элементов, находящихся между минимальным и максимальным элементами. Сами минимальный и максимальный элементы в сумму не включать.
- Сначала надо найти минимальный и максимальный элементы массива. Это можно сделать в цикле заполнения массива. Причем лучше запоминать в переменных не сами значения элементов, а их индексы.
- Поскольку неизвестно, какой из элементов (минимальный или максимальный) встречается в массиве раньше, то неизвестно, как в последующем делать перебор участка массива: от начала этого участка к его концу или от конца к началу. Данную проблему можно решить путем обмена значений переменных, если, например, переменная, содержащая индекс минимума, окажется больше содержащей индекс максимума.
- До подсчета суммы элементов, находящихся между минимумом и максимумом, следует переменной (например, 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 <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, %3dn", 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("%4dn", 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