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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2015, 14:26   #1
yankel
Пользователь
 
Регистрация: 13.03.2014
Сообщений: 22
По умолчанию С++, массивы и указатели

Нужно найти непрерывный участок из 10 элементов, сумма которых максимальна, не используя индексации.
Я застрял на этапе поиска максимальной суммы, укажите на ошибку в алгоритме, пожалуйста

Код:
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <locale.h>
 #include <stdio.h>

 
int main()
{
    srand(time(NULL));
    setlocale(LC_ALL, "");
 
    int size;
    int *Cr;
    size =20; /*50+rand() % 151;*/
	printf("size=%d\n",size);
    int *Ar = (int*)malloc(size*(sizeof(int)));
     printf("Начальный массив:\n");
  for (Cr=Ar; Cr<Ar+size; Cr++) {
    *Cr=rand()%101;
    printf("%3d ",*Cr);
    }
  putchar('\n');
    int sum=0;
    int SUM=0;
	int k=10;
	int *Ir=0;
    for (Cr = Ar; Cr < Ar + size - k+1; Cr++)
    {
        if (SUM < sum)
        {
            SUM = sum;
        }
        sum = 0;
		Ir=Cr;
		
 for(Cr=Ir;Cr<Ir+k;Cr++)
        sum += *Cr;
		
    }
	printf("%3d",SUM);
 
   
    return 0;
    
}
yankel вне форума Ответить с цитированием
Старый 27.12.2015, 15:47   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

А как вам такой вариант поиска?
UPD В этом месте был неверный код
Просто пересчитывать каждый раз сумму не очень хорошо.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.12.2015 в 17:22.
BDA на форуме Ответить с цитированием
Старый 27.12.2015, 16:44   #3
yankel
Пользователь
 
Регистрация: 13.03.2014
Сообщений: 22
Счастье

Цитата:
Сообщение от BDA Посмотреть сообщение
А как вам такой вариант поиска?

Просто пересчитывать каждый раз сумму не очень хорошо.
Благодарю, но сумма все равно подсчитывается неверно
Вот скрин консоли, и сумма выведенных элементов явно меньше, чем выдает программа. Я уже не знаю, что с этим делать
Безымянный.jpg
yankel вне форума Ответить с цитированием
Старый 27.12.2015, 17:14   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Цитата:
Сообщение от yankel Посмотреть сообщение
но сумма все равно подсчитывается неверно
Да, и правда. Насажал ошибок в коде.
Вот так вроде верно работает:
Код:
int k = 10;
if (k > size) {
    printf("K greater than SIZE\n");
    return 0;
}
int max_sum = 0;
int *Fe = Ar; // first element
int *Ir;
for (Cr = Ar; Cr < Ar + k; Cr++)
    max_sum += *Cr;
int cur_sum = max_sum;
for (Cr = Ar + k, Ir = Ar; Cr < Ar + size; Cr++, Ir++) {
    cur_sum = cur_sum - *Ir + *Cr;
    if (cur_sum > max_sum) {
        max_sum = cur_sum;
        Fe = Ir + 1;
    }
}
printf("Sum: %3d\n", max_sum);
for (Cr = Fe; Cr < Fe + k; Cr++)
    printf("%3d ", *Cr);
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.12.2015 в 17:28.
BDA на форуме Ответить с цитированием
Старый 27.12.2015, 17:29   #5
yankel
Пользователь
 
Регистрация: 13.03.2014
Сообщений: 22
По умолчанию

Спасибо огромное
yankel вне форума Ответить с цитированием
Старый 27.12.2015, 17:39   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,303
По умолчанию

Пожалуйста. А по поводу вашего кода. Вы внутри цикла по Cr, опять используете Cr для внутреннего цикла, тем самым "портя" внешний цикл. Если исправить эту проблему, то тогда вы еще не будете учитывать сумму, посчитанную на последней итерации.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.12.2015 в 17:41.
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
указатели на массивы и массивы указателей blacktener Общие вопросы C/C++ 16 13.06.2011 20:45
Указатели и массивы Lerank Помощь студентам 2 09.09.2010 08:00
Массивы и указатели (С++) slavy Помощь студентам 4 26.08.2009 23:33
Массивы и указатели (С++) slavy Помощь студентам 3 26.08.2009 19:39
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39