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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2010, 15:30   #1
R@Ziel
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 14
Печаль ошибка в логике кода

Последовательность из десяти целых чисел (как положительных, так и отрицательных) представлена в виде одномерного массива. Найти и вывести на экран подпоследовательность подряд идущих чисел, сумма которых максимальна. Например, для последовательности : 1 -8 3 2 -1 4 -6 2 1 -5 ответом будет следующая подпоследовательность: 3 2 -1 4

Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <locale>
int *mas;
int obrabotka(int n);
using namespace std;
int main()
{
	setlocale(0,"rus");
                //srand((unsigned)time(NULL));//генр числ от таймера
        int n;
                cout<<"Введите размер массива ";
                do
				{
					
					cin>>n;
				if (n<=1 || n>10) cout<<"Не правильное значение размерности массива[1,10]!\n";
				}
				while(n<=1 || n>10);
                mas=new int[n+1];//
                cout<<"Введите последовательно элементы массива \n";
				for(int i=0; i<n; i++)//заполнение массива..
                {
                    do
					{
						cout<<"Введите "<<i<<" элемент: ";
						cin>>mas[i];
					if (mas[i]<-50 || mas[i]>50) cout<<"элементы массива в диапазоне[-50,50]!\n";
					}
					while(mas[i]<-50 || mas[i]>50);
                }//..
                cout<<endl;
obrabotka(n);
}

/*Находти и выводим  на экран подпоследовательность подряд идущих чисел, сумма которых максимальна*/
int obrabotka(int n)
{
    int sum=0,i_start=0, col=1, temp=0,i=0,j=0;    
	sum=mas[0];
  for(i = 0; i<n-1 ; i++)//перебираем элеменыт пока i не станет равен n-1 раз
  {
          temp=mas[i];
          for(j=i+1; j<n; j++)//сравниваем последующие єлементы с первым до конца
                  {
                  if(sum<temp)//если элемент м
                              {
                                 sum=temp;
                                 i_start=i;
                                 col=j-i;
                               }
                   temp+=mas[j];
                  }
 
  }
  for(i=i_start; i<col+i_start; i++)
  cout<<mas[i]<<" ";
  cout<<endl;            
        system("pause");
        return 0;
}
Код рабочий вот только когда вводиш 1 -10 2 -10 3 выводи 2 или -10 -10 -10 -10 1 выводит -10 в чем проблема понять не могу?

Последний раз редактировалось R@Ziel; 03.01.2010 в 15:34.
R@Ziel вне форума Ответить с цитированием
Старый 03.01.2010, 15:31   #2
R@Ziel
Пользователь
 
Регистрация: 13.11.2009
Сообщений: 14
По умолчанию

Походу не проверяет последний элемент я непойму почему?
R@Ziel вне форума Ответить с цитированием
Старый 03.01.2010, 16:10   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
#include <iostream.h>

int main()
{
        randomize();

        int *mas, sum = 0, max = 0, SIZE = 10, elem_1 = 0, elem_2 = 0;

        mas = new int[SIZE];

        cout << "Input array: ";

        for (int i = 0; i < SIZE; i++)
                {
                        mas[i] = random(10)-5;
                        cout << mas[i] << " ";
                }

        cout << "\n\nOutput number: ";

        for (int i = 0; i < SIZE - 1; i++)
                {
                        sum = mas[i]+mas[i+1];

                        if (sum >= max)
                                {
                                        max = sum;
                                        elem_1 = mas[i];
                                        elem_2 = mas[i+1];
                                }

                        sum = 0;
                }

        cout << elem_1 << " " << elem_2;

        delete []mas;

        cin.get();

        return 0;
}
Если нужно найти максимальную сумму, тогда в такой последовательности: 1 -8 3 2 -1 4 -6 2 1 -5 должно вывести 3 2.
profi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при написании ассемблеровского кода на Визе 6.0 Познающий Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 03.11.2009 19:09
Ошибка в логике? NSvirus PHP 8 12.10.2009 02:41
Решение задачек по логике! s20 Общие вопросы C/C++ 3 15.09.2009 01:06
Ч чём ошибка моего кода сохранения и загрузки? AngelOfDeath Общие вопросы Delphi 3 08.04.2008 13:55