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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2014, 18:02   #1
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию указатели и массивы

помогите пожалуйста, что то не получается у меня(
Найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная
Код:
#include <iostream>
#include <time.h>

using namespace std;

int main()
{
const int n=20;
int A[n], summ=0, ind_beg=0, indBegMax, summMax=-1,c;
int  *A, *I;

srand (unsigned (time(0)));

for (int I=A; I<A+size; I++)
{
A[I]=rand()%200-100; //рандомное число от -100 до 100
cout<<" "<<A[I];
}
A = new int [size];  
for (int I=A; I<A+size; I++)
{
if (A[I]<0)
{
if (summMax<summ)
{
summMax=summ;
indBegMax=ind_beg;
}
summ=0; ind_beg=-1;
}
else
{
summ+=A[I];
if (ind_beg<0) ind_beg=I;
}
}
if (summMax<summ)
c=ind_beg;
else
c=indBegMax;

if(summMax!=-1)
{
cout<<"\nMax summ="<<summMax<<":";

while (A[c]>0)
{
cout<<" "<<A[c++];
if (c==n) break;
}

}
else
cout<<"positive elements absent\n";

cout<<endl; system("pause");
return 0;
}

Последний раз редактировалось Zaraaa; 12.11.2014 в 18:06.
Zaraaa вне форума Ответить с цитированием
Старый 12.11.2014, 21:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы делал так:
Код:
int b=0,e=0,max=0,smax,ib;
for(i=0;i<n;i++){
 smax=0; ib=i;
 if(a[i]>0){
  for(;i<n && a[i]>=0;i++) smax+=a[i];
  if(smax>max){b=ib;e=i;max=smax;}
 }
 Выводим max и в цикле элементы от b до e не включая е;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2014, 21:41   #3
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я бы делал так:
Код:
int b=0,e=0,max=0,smax,ib;
for(i=0;i<n;i++){
 smax=0; ib=i;
 if(a[i]>0){
  for(;i<n && a[i]>=0;i++) smax+=a[i];
  if(smax>max){b=ib;e=i;max=smax;}
 }
 Выводим max и в цикле элементы от b до e не включая е;
}
а разве это относится к указателям?
Zaraaa вне форума Ответить с цитированием
Старый 12.11.2014, 22:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

У тебя же А указатель?
Ну если не нравится так то:
Код:
int b=0,e=0,max=0,smax,ib, *p=A;
for(i=0;i<n;i++,p++){
 smax=0; ib=i;
 if(*p>0){
  for(;i<n && *p>=0;i++) smax+=*p;
  if(smax>max){b=ib;e=i;max=smax;}
 }
 Выводим max и в цикле элементы от b до e не включая е;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2014, 21:37   #5
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию

Сделал по-своему, максим сумму кое где не правильно считает (особенно когда в массиве нет положит чисел и если равно 0),
а главное не выводится послед-ть положительных чисел , с помощью которой была посчитана максим сумма:
типа...задан массив...
максим сумма равна....:послед-ть положительных чисел помогите исправить
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int main(){

int size,summ=0, ind_beg=0, indBegMax, summMax=-1,c;
int  *A, *I;

//clrscr();
srand (unsigned (time(0)));

size=rand()%50;
printf("size = %d\n\n",size);

A = new int [size];      // или A = new int (size);
printf("Pervonach massiv :\n\n");
for (I=A; I<A+size; I++)
{
  *I=rand()%20-10;
  printf(" % 3d ",*I);
}

summMax=0,summ=0, ind_beg=-1;
for (I=A; I<A+size; I++)  {
  
if (*I<0)
{
if (summMax<summ)
{
summMax=summ;
indBegMax=ind_beg;
}
summ=0; ind_beg=-1;
}
else
{
summ+=*I;
if (ind_beg<0) ind_beg=*I;
}
}
if (summMax<summ)
c=ind_beg;
else
c=indBegMax;

if(summMax!=-1)
{
printf("\n\n Max summa= %d\n\n",summMax,":");

while (A[c]>0)
{
printf(" ",A[c++]);

if (c==size) 
break;
}
}
else
printf("posledovatelnost polojitelnih chisel\n");
getchar();
return  0;
}
Zaraaa вне форума Ответить с цитированием
Старый 20.11.2014, 19:53   #6
Zaraaa
Пользователь
 
Регистрация: 19.04.2013
Сообщений: 83
По умолчанию

Помогите пожалуйста кто-нибудь...
Zaraaa вне форума Ответить с цитированием
Старый 20.11.2014, 21:10   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не нравится мне твой код. Не стал разбираться, тем паче что читать не удобно, предлагаю свой:
Код:
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
    int size=10,i,s=0,smax=0;
    int *a=new int[size],*p,*k,*kmax,*end=a+size;
    //Заряжаем массив
    for(p=a;p<end;p++){
        *p=rand()%10-5;
        cout<<*p<<'\t';
    }; cout<<'\n';

    //Ищем последовательность
    for(p=a;p<end;p++){
        for(k=p;k<end && *k>=0 ;k++) s+=*k;
        if(s>smax){smax=s;kmax=p;}
        s=0;
        p=k;
    }
    cout<<smax<<'\n';
    //Выводим последовательность
    for(k=kmax;k<end && *k>=0 ;k++)
        cout<<*k<<'\t';
    delete[] a;
    cin.get();
    return 0;
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Указатели и массивы CHELOVEKPAUK Помощь студентам 0 20.10.2013 21:22
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Массивы и указатели (С++) slavy Помощь студентам 4 26.08.2009 23:33
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39
Указатели и массивы. (С++) Eddie Помощь студентам 8 24.04.2009 19:48