A
Azgor
приёмы написания эффективных алгоритмов (вместо трёх и более циклов всего два или один - максимальная сложность алгоритма указана в условии, О(х)), решать всё всем: все размерности всех одномерных массивов 100000
-в массиве целых чисел найти непрерывный подмассив, сумма элементов которого максимальная; вывести два индекса (начало, конец) и получившуюся сумму ( O )
Проблема состиит в том, что если например массив заполнить так -7 5 -9 то программа не работает.... Объясните причину, кому не длень разбираться, и , если можно, методы преодоления этого. Зарание спасибо.
-в массиве целых чисел найти непрерывный подмассив, сумма элементов которого максимальная; вывести два индекса (начало, конец) и получившуюся сумму ( O )
C++:
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip.h>
using namespace std;
const int max_kl=100000;
int main()
{
int n,l=0,r,ts=0,ms=0,temp;
int mas[max_kl];
bool b1=0;
srand((unsigned)time(NULL));
cout << "Vvedite razmernost' massiva -> ";cin>>n;cout <<endl;
for(int i=0;i<n;i++)
{
/*cout << "Wwedite " << i+1 << "-element: " << endl;
cin >> mas[i];*/
mas[i]=rand()%(99+99)-99;
cout << setw(5)<< mas[i];
}
cout <<endl;
ts=mas[0];
temp=1;
for(int i=1;i<n;i++)
{
if(mas[i]>0){b1=1;break;}
if(mas[i]>ts){ts=mas[i];temp=i+1;}
}
if(b1==1)
{
for(int i=1;i<n;i++)
{
ts=ts+mas[i];
if(ts<0)
{
temp=i;ts=0;
}
if(ts>ms)
{
ms=ts;r=i;l=temp;
}
}
cout <<"Otvet-> l: "<<l+1<<" r: "<<r+1<<" ms: "<<ms<<endl;
}
else cout<<"Otvet-> " << temp <<" "<< ts<<endl;
system("pause");
return 0;
}
Проблема состиит в том, что если например массив заполнить так -7 5 -9 то программа не работает.... Объясните причину, кому не длень разбираться, и , если можно, методы преодоления этого. Зарание спасибо.