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

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

Заполнение массива и подсчет суммы его элементов оформить в виде отдельной функции.

Если сохранять все массивы нет необходимости, то тогда задача решается проще.

В основной ветке программы создается два массива. Один для хранения массива с максимальной суммой элементов, а второй — для хранения текущего массива.

В функцию передается ссылка на текущий массив. Там он заполняется, выводится на экран и вычисляется сумма его элементов, которую функция возвращает в основную ветку программы.

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

Pascal



const N = 15;
type arr = array[1..N] of integer;
var
arr_max, arr_new: arr;
sum_max, sum_new, i, id: integer;

function new_array(var a: arr): integer;
var k: byte;
begin
new_array := 0;
for k:=1 to N do begin
a[k] := random(50);
write(a[k]:4);
new_array := new_array + a[k];
end;
writeln(' - ', new_array);
end;

begin
randomize;
sum_max := 0;
id := 1;
for i:=1 to 10 do begin
sum_new := new_array(arr_new);
if sum_new > sum_max then begin
arr_max := arr_new;
sum_max := sum_new;
id := i;
end;
end;
writeln;
writeln(id, '-й массив с максимальной суммой элементов:');
for i:=1 to N do
write(arr_max[i]:4);
writeln(' - ', sum_max);
end.



3 29 24 7 30 28 37 30 7 4 23 18 26 18 10 - 294
2 39 2 35 15 33 35 37 16 8 35 37 8 22 47 - 371
1 36 47 21 49 35 44 40 27 16 36 15 43 12 19 - 441
13 2 9 21 9 13 13 26 32 15 12 32 14 19 7 - 237
0 11 7 11 27 13 23 9 33 19 21 9 31 9 7 - 230
10 9 33 22 5 25 1 40 36 25 15 41 39 8 38 - 347
17 13 44 18 32 18 22 11 19 40 26 29 15 2 0 - 306
20 33 35 21 1 4 3 33 7 10 8 33 12 10 5 - 235
36 33 31 26 44 33 18 17 27 42 15 12 19 8 34 - 395
21 29 48 41 31 42 34 0 17 37 36 33 11 12 42 - 434

3-й массив с максимальной суммой элементов:
1 36 47 21 49 35 44 40 27 16 36 15 43 12 19 - 44

Язык Си



#include < stdio.h>
#define N 15
int array(int a[]);

main() {
int arr_new[N], arr_max[N], i, j, id, sum_max, sum_new;
srand(time(NULL));
id = 0;
sum_max = 0;
for (i=1; i<=10; i++) {
sum_new = array(arr_new);
if (sum_new > sum_max) {
sum_max = sum_new;
for (j=0; j< N; j++) arr_max[j] = arr_new[j];
id = i;
}
}
printf("\n%d-й массив с максимальной суммой элементов:\n", id);
for (i=0; i< N; i++) printf("%4d", arr_max[i]);
printf(" - %d\n", sum_max);
}

int array(int a[]) {
int k, sum;
sum = 0;
for (k=0; k< N; k++) {
a[k] = rand()%50;
sum += a[k];
printf("%4d", a[k]);
}
printf(" - %d\n", sum);
return sum;
}

Нельзя напрямую присвоить один массив другому.

Python



from random import random


def array(a):
s = 0
for i in range(15):
a[i] = int(random()*50)
print("%4d" % a[i], end='')
s += a[i]
print(" - %d" % s)
return s


arr_new = [0]*15
sum_max = 0
index = -1
arr_max = -1
for i in range(10):
sum_new = array(arr_new)
if sum_new > sum_max:
sum_max = sum_new
index = i+1
arr_max = arr_new[:]

print("%d-й массив имеет максимальную сумму элементов:" % index)
print(arr_max, ' - ', sum_max)


Выражение arr_max = arr_new[:] присваивает копию массива. Иначе - создавалась бы еще одна ссылка на текущий массив arr_new, и в конце выводился бы последний массив, а не с наибольшей суммой (сама сумма выводилась бы правильно).

КуМир


цел Н = 15
цел таб а[1:Н]
алг
нач
цел сч, сч2, индекс, сумма, сумма_текущая
цел таб б[1:Н]
сумма := 0
индекс := 1
нц для сч от 1 до 10
сумма_текущая := массив
если сумма < сумма_текущая то
сумма := сумма_текущая
индекс := сч
нц для сч2 от 1 до Н
б[сч2] := а[сч2]
кц
все
кц
вывод индекс, "-й массив имеет максимальную сумму элементов:", нс
нц для сч от 1 до Н
вывод б[сч], " "
кц
вывод " - ", сумма
кон

алг цел массив
нач
цел сч
знач := 0
нц для сч от 1 до Н
а[сч] := int(rand(0,50))
вывод а[сч], " "
знач := знач + а[сч]
кц
вывод " - ", знач, нс
кон

Переменные-массивы нельзя присваивать друг другу.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Pascal


const N = 15;
type arr = array[1..N] of integer;
var
arr_max, arr_new: arr;
sum_max, sum_new, i, id: integer;

function new_array(var a: arr): integer;
var k: byte;
begin
new_array := 0;
for k:=1 to N do begin
a[k] := random(50);
write(a[k]:4);
new_array := new_array + a[k];
end;
writeln(' - ', new_array);
end;

begin
randomize;
sum_max := 0;
id := 1;
for i:=1 to 10 do begin
sum_new := new_array(arr_new);
if sum_new > sum_max then begin
arr_max := arr_new;
sum_max := sum_new;
id := i;
end;
end;
writeln;
writeln(id, '-й массив с максимальной суммой элементов:');
for i:=1 to N do
write(arr_max[i]:4);
writeln(' - ', sum_max);
end.



3 29 24 7 30 28 37 30 7 4 23 18 26 18 10 - 294
2 39 2 35 15 33 35 37 16 8 35 37 8 22 47 - 371
1 36 47 21 49 35 44 40 27 16 36 15 43 12 19 - 441
13 2 9 21 9 13 13 26 32 15 12 32 14 19 7 - 237
0 11 7 11 27 13 23 9 33 19 21 9 31 9 7 - 230
10 9 33 22 5 25 1 40 36 25 15 41 39 8 38 - 347
17 13 44 18 32 18 22 11 19 40 26 29 15 2 0 - 306
20 33 35 21 1 4 3 33 7 10 8 33 12 10 5 - 235
36 33 31 26 44 33 18 17 27 42 15 12 19 8 34 - 395
21 29 48 41 31 42 34 0 17 37 36 33 11 12 42 - 434

3-й массив с максимальной суммой элементов:
1 36 47 21 49 35 44 40 27 16 36 15 43 12 19 - 44

Язык Си


#include < stdio.h>
#define N 15
int array(int a[]);

main() {
int arr_new[N], arr_max[N], i, j, id, sum_max, sum_new;
srand(time(NULL));
id = 0;
sum_max = 0;
for (i=1; i sum_max) {
sum_max = sum_new;
for (j=0; j< N; j++) arr_max[j] = arr_new[j];
id = i;
}
}
printf("\n%d-й массив с максимальной суммой элементов:\n", id);
for (i=0; i< N; i++) printf("%4d", arr_max[i]);
printf(" - %d\n", sum_max);
}

int array(int a[]) {
int k, sum;
sum = 0;
for (k=0; k< N; k++) {
a[k] = rand()%50;
sum += a[k];
printf("%4d", a[k]);
}
printf(" - %d\n", sum);
return sum;
}

Нельзя напрямую присвоить один массив другому.
Python


from random import random


def array(a):
s = 0
for i in range(15):
a[i] = int(random()*50)
print("%4d" % a[i], end='')
s += a[i]
print(" - %d" % s)
return s


arr_new = [0]*15
sum_max = 0
index = -1
arr_max = -1
for i in range(10):
sum_new = array(arr_new)
if sum_new > sum_max:
sum_max = sum_new
index = i+1
arr_max = arr_new[:]

print("%d-й массив имеет максимальную сумму элементов:" % index)
print(arr_max, ' - ', sum_max)


Выражение arr_max = arr_new[:] присваивает копию массива. Иначе - создавалась бы еще одна ссылка на текущий массив arr_new, и в конце выводился бы последний массив, а не с наибольшей суммой (сама сумма выводилась бы правильно).
КуМир

цел Н = 15
цел таб а[1:Н]
алг
нач
цел сч, сч2, индекс, сумма, сумма_текущая
цел таб б[1:Н]
сумма := 0
индекс := 1
нц для сч от 1 до 10
сумма_текущая := массив
если сумма < сумма_текущая то
сумма := сумма_текущая
индекс := сч
нц для сч2 от 1 до Н
б[сч2] := а[сч2]
кц
все
кц
вывод индекс, "-й массив имеет максимальную сумму элементов:", нс
нц для сч от 1 до Н
вывод б[сч], " "
кц
вывод " - ", сумма
кон

алг цел массив
нач
цел сч
знач := 0
нц для сч от 1 до Н
а[сч] := int(rand(0,50))
вывод а[сч], " "
знач := знач + а[сч]
кц
вывод " - ", знач, нс
кон

Переменные-массивы нельзя присваивать друг другу.