Найти максимальную сумму подряд идущих N элементов массива - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Необходимо вывести максимальную сумму подряд идущих элементов массива. Вводятся такие данные: 1) количество элементов массива N, 2) сами элементы, 3) число подряд идущих эл-тов M. Нужно определить максимальную сумму состоящую из М эл-тов. При этом

ЗАПРЕЩАЕТСЯ обращаться к одному и тому же элементу массива более 2-х раз и запрещается создавать новые массивы и использовать функции

. вот что у меня получилось (с функцией):
int summa (int *array, long size)
{
      int j, f;
      f= array[0]
      for (j=1; j<size; j++) 
      f= f + array[j];
      return f;
}
/*        ...        */
max= summa(&a[0],m);
for (i=1; i<n-m; i++){
      x= summa(&a[i],m);
      if (x>max) 
         max= x;
/*       ...         */
Подскажите, пожалуйста, как сделать эту программу без функций? Заранее спасибо =)

Решение задачи: «Найти максимальную сумму подряд идущих N элементов массива»

textual
Листинг программы
#include <stdio.h>
 
int main(int argc, char* argv[])
{
    int Arr[]={1,2,3,-3,4,5,6,7,-1,5};
    int smax,s,i,j,m,n,k,i_beg;
    n=sizeof(Arr)/sizeof(int);
    printf("m=");
    scanf("%d",&m);
    i_beg=0;
    k=0;
    smax=0;
    for (i=0; i<m; i++) smax+=Arr[i]; 
    s=smax;
 
    for (j=m; j<=n-m+2; j++)
    {
        s=s-Arr[k++];
        s=s+Arr[j];
        if (s > smax)
        {
            smax=s;
            i_beg=k;
        }
    }
    printf("i_beg=%d S=%d \n",i_beg,smax);
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлен массив Arr типа int, содержащий 10 целых чисел.
  2. В функции main() объявлены следующие переменные: smax - для хранения максимальной суммы; s - для промежуточных вычислений; i, j, m, n, k - для управления циклами. i_beg - для хранения начального индекса максимальной суммы.
  3. Переменная m инициализируется значением количества элементов массива Arr.
  4. Переменная i_beg инициализируется нулевым значением.
  5. Переменная smax инициализируется значением суммы первых m элементов массива Arr.
  6. Переменная s инициализируется значением переменной smax.
  7. В цикле вычисляются суммы различных подмассивов, начиная с элемента с индексом i_beg и заканчивая элементом с индексом n-m+2.
  8. Если сумма подмассива больше текущей максимальной суммы, то обновляются переменные smax, i_beg и s.
  9. Выводится значение переменной i_beg и значение переменной smax.
  10. Функция main() возвращает 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы