Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > помогите решить задачу


Автор: Гость_гость 7.1.2005, 11:57
Есть массив из элементов типа интегер. Мы
можем в этом массиве взять наразрывную цепочку(от такого-то до такого-то
элемента) далее считаем сумму элементов в этой цепи.
задача - найти цепочку с максимальной суммой без ограничения на длинну цепочки.

Автор: Alexandr87 7.1.2005, 19:15
скажу глупость, но нужно делать перебор

Автор: Wowa 8.1.2005, 02:39
Модератор: Название темы должно отражать ее суть!

Автор: Гость_гость 8.1.2005, 13:12
Извините, что не правильно назвал тему. Учту.
А перебором, в конечном итоге комп виснет.

Автор: volvo877 8.1.2005, 13:21
Гость_гость
Цитата
найти цепочку с максимальной суммой без ограничения на длинну цепочки
Очень странное задание, потому что если длина не ограничена, то цепочкой с максимальной суммой будет весь массив...

Автор: Dov 8.1.2005, 14:14
Цитата(volvo877 @ 8.1.2005, 13:21)
Очень странное задание, потому что если длина не ограничена, то цепочкой с максимальной суммой будет весь массив...

А если массив такой {1, 2, -100, 3, 4}? Тогда цепочкой с максимальной суммой будет 3, 4.
Вот такой вариант:
Код
#include <iostream.h>
#include <iomanip.h>
#define SIZE 10

void main()
{
   int ar[]   = {5, -5, 8, -2, 9, -4, 8, -3, 3, -99};
   int sum    = 0;
   int max    = 0;
   int iBeg   = 0;
   int iEnd   = 0;
   int iFirst = 0;

   for(int i = 0; i < SIZE; i++)
   {
       sum += ar[i];
       if(sum <= 0)
       {
           sum    = 0;
           iFirst = i + 1;
       }
       else if(sum > max)
       {
           max  = sum;
           iBeg = iFirst;
           iEnd = i;
       }
   }

   cout << "Index :";
   for(i = 0; i < SIZE; i++)
       cout << setw(4) << i;

   cout << "\nArray :";
   for(i = 0; i < SIZE; i++)
       cout << setw(4) << ar[i];

   cout << "\nMySeq :";
   for(i = 0; i <= iEnd; i++)
       i < iBeg ? (cout << setw(4) << ' ') : (cout << setw(4) << ar[i]);

   cout << "\n\nMaxSum: " << max
        << "\nIndBeg: "   << iBeg
        << "\nIndEnd: "   << iEnd << endl;
}



Автор: Гость_гость 8.1.2005, 14:42
Цитата (volvo877 @ 8.1.2005, 13:21)
Цитата
Очень странное задание, потому что если длина не ограничена, то цепочкой с максимальной суммой будет весь массив...

Я с вами согласен, но всё равно спасибо!!!! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)