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

Задача

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

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

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

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

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

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

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

Исходный код на языке программирования 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.

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

   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

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

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

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

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

Исходный код на языке программирования 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
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)

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

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

Особенности решения задачи в среде КуМир

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

Тема

Функции

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

Средний

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

Комментарий

Когда выполняем "print(arr_max, ' - ', sum_max)" arr_max выводит последний 10-й массив, а не тот который максимальный. Почему так? = /