Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2009, 09:48   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию максимальная сумма элементов подмассива в массиве

Доброе время суток, ребята дана такая задача. Дан массив размерности N нужно найти максимальную сумму элементов подмассива в массиве.
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.11.2009, 10:31   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

язык укажите
Цитата:
Идея алгоритма: вначале ищем первый положительный элемент в последовательности. Если такого не окажется, то наибольший из просмотренных и будет решением. Если такой элемент нашелся, то считаем, что текущая сумма и максимальная равны этому элементу. Начинаем просматривать эту последовательность до конца. На каждом шаге увеличиваем текущую сумму на текущий элемент. Если текущая сумма оказаласть отрицательной - зануляем ее. Кроме того, если значение текущей суммы окажется больше максимальной, то максимальную сумму считаем равной текущей.
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 04.11.2009 в 10:46.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.11.2009, 10:34   #3
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Обычный Pascal
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.11.2009, 10:52   #4
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
var min,j,maxsum,sum,n: longint;
    inp, outp: text;
begin
  assign(inp,'input.txt');
  reset(inp);
  readln(inp);
  read(inp,min);
  while (not eof(inp))and(min<=0)do
  begin
    read(inp,j);
    if j>min then min:=j;// ищем первый  положительный элемент
  end;
  maxsum:=min; // максимальной сумме присваиваем значение первого положительного элемента
  sum:=min;     // тек сумме присваиваем значение максимального элемента
  while not eof(inp) do  //считываем посл-ть
  begin
    read(inp,j);   
     inc(sum,j);   // увеличиваем тек сумму на элемент посл-ти
    if sum>maxsum then maxsum:=sum; // если тек сумма> max суммы то максСумме := текСумму
    if sum<0 then sum:=0;// если ТекСумма<0 то обнуляем ее
  end;
  assign(outp,'output.txt');
  rewrite(outp);
  write(outp,maxsum); ну и выводим макс сумму
  close(inp);
close(outp);
end.
из найденного!
вариант на С++(или "си два плюса"-как говаривал мой препод по информатике в школе)
Код:
#include <stdio.h>

//int arr[]={-1, 3, -5, 3, 3, -8, 4, 7, -2, 3};
int arr[]={1, 7, -5, 3, -5, 9};

struct subsum
{
  int pos;
  int len;
  int sum;
} max, max_end;

int main(int argc, char** argv)
{
  int i, s;
  max_end.pos=0; max_end.len=1; max_end.sum=arr[0];
  max=max_end;
  for (i=1; i<(sizeof(arr)/sizeof(arr[0])); ++i)
  {
    s=arr;
    max_end.sum+=s; ++max_end.len;
    if (max_end.sum<s)
    {
      max_end.pos=i; max_end.len=1; max_end.sum=s;
    }
    if (max_end.sum>max.sum) max=max_end;
  }
 
  printf("Max. sum=%d has subarray (%d", max.sum, arr[max.pos]);
  for (i=max.pos+1; i<max.pos+max.len; ++i)
  {
    printf(", %d", arr);
  }
  printf(")\n");
}
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 04.11.2009 в 11:52.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.11.2009, 11:00   #5
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

ОДИНОЧЕСТВО В СЕТИ, все верно, только еще нужно уточнение от автора - часто в этой задаче считают пустой подмассив одним из возможных вариантов, тогда надо выводить или положительное число, или 0 (если в массиве нету положительных элементов, то пустой подмассив и будет ответом). Если сдесь имеется ввиду непустой массив - тогда так. Иначе - пусть автор темы переделывает под себя.

Последний раз редактировалось LeBron; 04.11.2009 в 13:42.
LeBron вне форума Ответить с цитированием
Старый 04.11.2009, 11:09   #6
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

мне нужен был только сам алгоритм, под себя я его подстрою, еще раз спасибо, а можном алгоритм пояснить
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 04.11.2009 в 11:22.
Sparky вне форума Ответить с цитированием
Старый 04.11.2009, 11:53   #7
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
можном алгоритм пояснить
добавила комментарии к посту №4
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.11.2009, 11:55   #8
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

если нет положительного то почему максимальный из просмотренных будет ответом?
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 04.11.2009, 11:58   #9
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
если нет положительного то почему максимальный из просмотренных будет ответом?
потому что если все отрицательные или 0 то максимум из них и будет максимальной суммой так как вы просмотрите все элементы!
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.11.2009, 12:02   #10
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

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

Последний раз редактировалось Sparky; 04.11.2009 в 12:06.
Sparky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13
В массиве A, состоящем из 10 элементов, подсчитать количество положительных элементов Alex61 Помощь студентам 5 16.05.2009 23:06
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Количество элементов в массиве skit Общие вопросы C/C++ 3 18.03.2009 21:56
СУММА ЗНАЧЕНИЙ ЭЛЕМЕНТОВ Dimak24 Помощь студентам 1 24.12.2008 09:29