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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2014, 16:38   #1
Марина4444
Пользователь
 
Регистрация: 02.12.2011
Сообщений: 10
Радость Простая задача с циклом

Здравствуйте. Мне попалась следующая задачка:
Имеется массив чисел. В нём могут находиться как отрицательные, так и положительные элементы. Его длина - n.

Необходимо найти наибольший подмассив этого массива. То есть, последовательность чисел с наибольшей суммой. И вывести номера крайних элементов.

Например: Массив содержит: -1, 2, 6, 7, -5, 12, -1, -11, -5, 1. Наибольшим подмассивом будет являться последовательность от второго элемента до шестого элемента.
2 + 6 + 7 + (-5) +12 = 22, где "2" - второй элемент, а "12" - шестой.

Я решила данную задачу следующим образом:

Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void main()
  {
  int L, R, Lmax, Rmax, n=10, i, sum=0, maxsum=0;
  int a[10] = { -1, 2, 6, 7, -5, 12, -1, -11, -5, 1 };
  for(L=0; L<n; L++)
    for(R=L; R<n; R++)
      {
      for(i=L; i<R; i++)
        sum = sum + a[i];
      if(sum > maxsum)
        {
        maxsum = sum;
        Lmax = L;
        Rmax = R;
        }
      sum = 0;
      }
  cout << maxsum << " " << Lmax+1 << " " << Rmax;
  getch();
  return;
  }
А какие ещё есть интересные способы её решения?
Спасибо
Марина4444 вне форума Ответить с цитированием
Старый 15.02.2014, 17:28   #2
009
Пользователь
 
Регистрация: 09.02.2014
Сообщений: 33
По умолчанию

вариант:
Код:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
void main()
  {
  int n=10, i, i_max=0;
  int a[10] = { -1, 2, 6, 7, -5, 12, -1, -11, -5, 1 };
  int b[10][2];
  for(i=0; i<n; i++)
  {
	  b[i][0]=a[i]; b[i][1]=i;
	  if(i>=0 && b[i][0]<b[i-1][0]+a[i])
	  {
		  b[i][0]=b[i-1][0]+a[i]; b[i][1]=b[i-1][1];			  
	  }
  }
  for(i=1; i<n; i++)
	  if(b[i_max][0]<b[i][0])
		  i_max=i;
  cout << b[i_max][0] << " " << b[i_max][1]+1 << " " << i_max+1;
  getch();
  return;
  }
009 вне форума Ответить с цитированием
Старый 16.02.2014, 10:53   #3
Марина4444
Пользователь
 
Регистрация: 02.12.2011
Сообщений: 10
По умолчанию

Спасибо! Сейчас буду разбираться))
Марина4444 вне форума Ответить с цитированием
Старый 16.02.2014, 11:34   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Наибольший подмассив это сам массив.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ простая программа с циклом и неверный результат Blondy Помощь студентам 11 31.03.2011 23:33
задача с циклом while lammy Помощь студентам 1 09.12.2009 16:06
задача с циклом for lammy Помощь студентам 3 04.12.2009 06:45
Простая программа с циклом на с++ Olya90 Помощь студентам 3 23.03.2009 20:32