Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 7

Рекурсия: найти подпоследовательность подряд идущих элементов последовательности, сумма которых минимальна

06.12.2009, 19:58. Показов 5291. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данной последовательности чисел найти подпоследовательность подряд идущих элементов, сумма которых минимальна. Реализовать с помощью рекурсивной функции.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2009, 19:58
Ответы с готовыми решениями:

Найти подпоследовательность из подряд идущих элементов с наибольшей суммой
Вводится массив. Найти в нем подпоследовательность из подряд идущих элементов с наибольшей суммой

Найти в массиве подпоследовательность из подряд идущих элементов с наибольшей суммой
В чем причина , прекращения работы программы? Задача: Найти в массиве подпоследовательность из подряд идущих элементов с наибольшей...

Найти в последовательности, количество пар подряд идущих отрицательных элементов
Задача звучит так: Найти в последовательности чисел, заданных пользователем с клавиатуры, количество случаев, когда два члена подряд...

10
 Аватар для manfeese
133 / 132 / 29
Регистрация: 04.01.2009
Сообщений: 415
06.12.2009, 21:33
Цитата Сообщение от А1екс Посмотреть сообщение
найти подпоследовательность подряд идущих элементов
Какая длина последовательности подряд идущих элементов должна быть?
0
0 / 0 / 0
Регистрация: 06.12.2009
Сообщений: 7
06.12.2009, 23:28  [ТС]
любая
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
07.12.2009, 08:18
Пример можно ?

Если длина любая - то находишь минимум массива.
Это будет подпоследовательность подряд идущих элементов, сумма которых минимальна, причем длина подпоследовательности имеют длину 1.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
07.12.2009, 08:34
для длины подпоследовательности от 2-х и более элементов, сумма которых минимальна:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream.h>
#include <windows.h>
#include<conio.h>
 
void posl_min(int *mas, int n, int i, int &i_start, int &count, int count_temp, bool fl, bool &fl1)
{
    if(mas[i]==mas[i+1])
    {
        if(fl)
        {
            count_temp++;
        }
        if(!fl)
        {
            fl=true;
            count_temp=2;
        }       
    }
    if((mas[i]!=mas[i+1] || i==n-2) && fl)
    {
        if(!fl1)
        {
            fl1=true;
            i_start=i-count_temp+1;
            count=count_temp;
        }
        if(mas[i]*count_temp<count*mas[i_start] && fl1)
        {
            i_start=i-count_temp+1;
            count=count_temp;
        }
        if(i==n-2 && fl)
            i_start++;
        fl=false;
    }
    i++;
    if(i<n-1)
        posl_min(mas, n, i, i_start, count, count_temp, fl, fl1);
}   
 
 
void main()
{
    int *mas, n, i=0, i_start=0, count=0, count_temp;
    bool fl=false, fl1=false;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå ðàçìåðíîñòü ïîñëåäîâàòåëüíîñòè: "<< endl;
    cin>>n;
    mas=new int[n];
    cout<<"Ââåäèòå ýëåìåíòû ïîñëåäîâàòåëüíîñòè: "<< endl;
    for(i=0; i<n; i++)
    {
       cout<<"["<<i<<"]= ";
       cin>>mas[i];
    }
    cout<<"èñõîäíàÿ ïîñëåäîâàòåëüíîñòü:"<<endl;
    for(i=0; i<n; i++)
       cout<<mas[i]<<" ";
    cout<<endl;
    i=0;
    posl_min(mas, n, i, i_start, count, count_temp=0, fl, fl1);
    if(!fl1)
        cout<<"Ïîäðÿä èäóùèõ ýëåìåíòîâ íåò";
    else
    {
        cout<<"Ïîäðÿä èäóùèå ýëåìåíòû ñ ìèíèìàëüíîé ñóììîé: "<<endl;
        for(i=i_start; i<i_start+count; i++)
            cout<<mas[i]<<" ";
    }
    cout<<endl;
    getch();
}
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.12.2009, 05:53
Цитата Сообщение от Deniel Посмотреть сообщение
valeriikozlov а где здесь рекурсия????
Давайте попробуем ее найти!
Может быть в определении функции void posl_min() в строке 38 моего кода? Такая рекурсия не подойдет?
0
 Аватар для manfeese
133 / 132 / 29
Регистрация: 04.01.2009
Сообщений: 415
11.12.2009, 18:19
valeriikozlov, А что это за ситуация у Вас получается, когда Подряд идущих элементов нет??? Я так понимаю, что количество элементов матрицы равно 0?!
Вот реализация этой проги в моем понимании для любой длины последовательности (от 1 и до n):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream.h>
#include <conio.h>
 
void posl_min(int* InputArray,int Length,int &min,int &Begin_Index,int &End_Index)
{
  for (int i = 0; i < Length; i++)
  {
     int Sum=0;
     for (int j=i; j < Length; j++) Sum+=InputArray[j];
     if (Sum<min)
     {
        min = Sum;
        Begin_Index=i;
        End_Index=Length-1;
     }
     posl_min(InputArray,Length-1,min,Begin_Index,End_Index);
  }
}
 
int main()
{
    int n;
    cout<<"Kolichestvo elementov posledovatelnosti: ";
    cin>>n;
 
    int *Array = new int[n];
    cout<<"Vvedite elementu posledovatelnosti:\n";
    for (int i = 0; i < n; i++)
        cin>>Array[i];
 
    int min = Array[0],B=0,E=0;
    posl_min(Array,n,min,B,E);
 
    cout<<"Posledovatelnost podriad iduwix elementov, summa kotorux minimalna,\n"<<
          "sostoit iz "<< E-B+1 <<" elementov(a):\n";
    for (int i=B; i<=E; i++)
       cout<<Array[i]<<" ";
    cout<<" = "<<min;
    getch();
    return 0;
}
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.12.2009, 19:04
manfeese,
Вот условие:

Цитата Сообщение от А1екс Посмотреть сообщение
В данной последовательности чисел найти подпоследовательность подряд идущих элементов, сумма которых минимальна. Реализовать с помощью рекурсивной функции.
подряд идущие элементы подпоследовательности, а не последовательности. Т.е.:
1. Есть последовательность элементов.
2. В этом наборе элементов (о которм говорится в п.1), есть какие-то подпоследовательности (а может быть их и нет совсем). Тот кто написал условие задачи, он эти подпоследовательности описывает так: "подпоследовательности подряд идущих элементов". Я это воспринял это как "подпоследовательности подряд идущих одинаковых элементов", иначе не вижу смысла!
Кстати он не жаловался на некорректное решение.
0
 Аватар для manfeese
133 / 132 / 29
Регистрация: 04.01.2009
Сообщений: 415
11.12.2009, 19:26
Я с вами согласен!!! Условие просто описано не корректно...
В моем понимании это звучит так:
Есть некая последовательность, скажем из 4 элементов{5,4,-1,9}. Всего в этой последовательности находится 10 подпоследовательностей, подряд идущих элементов:
Code
1
2
3
4
5
6
7
8
9
10
5
4
-1
9
5,4
4,-1
-1,9
5,4,-1
4,-1,9
5,4,-1,9
Ну вот из этих подпоследовательностей и надо выбрать ту, в которой их сумма манимальна, то есть -1;

Добавлено через 12 минут
Выражение "...подряд идущих элементов..." еще не означает одинаковых!!!
В примере, что я привел, допустим, подпоследовательность подряд идущих элементов 4,-1,9 последовательности 5,4,-1,9 подряд идущими считаються:
"-1" - элемент идущий за "4"
"9" - элемент идущий за "-1"
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
11.12.2009, 19:47
Выражение "...подряд идущих элементов..." еще не означает одинаковых!!!
Я с этим согласен. И писал, что это я сам принял такое решение считать именно так.

В примере, что я привел, допустим, подпоследовательность подряд идущих элементов 4,-1,9 последовательности 5,4,-1,9 подряд идущими считаються:
"-1" - элемент идущий за "4"
"9" - элемент идущий за "-1"
Я с этим не согласен (вернее согласен, но тут просто явная ошибка в написании условия), потому что тогда получается что подпоследовательность всего одна и она является всей последовательностью. А вообще-то по этому поводу спорить бессмысленно. Истину мог бы открыть в этом случае только один человек, но ему уже задачу решили, и вряд ли он сюда снова заглянет.
0
 Аватар для manfeese
133 / 132 / 29
Регистрация: 04.01.2009
Сообщений: 415
11.12.2009, 20:25
Цитата Сообщение от valeriikozlov Посмотреть сообщение
получается что подпоследовательность всего одна
Почему одна???
Цитата Сообщение от manfeese Посмотреть сообщение
Какая длина последовательности подряд идущих элементов должна быть?
Цитата Сообщение от А1екс Посмотреть сообщение
любая
А насчет спорить дальше, я с вами согласен, все же не будем. Может все же автор заглянет как-то и разъяснит ситуацию ))))

Добавлено через 33 минуты
Условие рекурсии немного переделал...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream.h>
#include <conio.h>
 
void posl_min(int* InputArray,int Length,int &min,int &Begin_Index,int &End_Index)
{
  for (int i = 0; i < Length; i++)
  {
     int Sum=0;
     //if (Length-i>1) // Условие для ограничения размера подпоследовательности
     for (int j=i; j < Length; j++) Sum+=InputArray[j];
     if (Sum<min)
     {
        min = Sum;
        Begin_Index=i;
        End_Index=Length-1;
     }
    if (i == 0)
       posl_min(InputArray,Length-1,min,Begin_Index,End_Index);
  }
}
 
int main()
{
    int n,Min_Index=0;
    cout<<"Kolichestvo elementov posledovatelnosti: ";
    cin>>n;
 
    int *Array = new int[n];
    cout<<"Vvedite elementu posledovatelnosti:\n";
    for (int i = 0; i < n; i++)
        cin>>Array[i];
 
    int min = Array[0],B=0,E=0;
    posl_min(Array,n,min,B,E);
 
    cout<<"Posledovatelnost podriad iduwix elementov, summa kotorux minimalna,\n"<<
          "sostoit iz "<< E-B+1 <<" elementov(a):\n";
    for (int i=B; i<=E; i++)
       cout<<Array[i]<<" ";
    cout<<" = "<<min;
 
    getch();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2009, 20:25
Помогаю со студенческими работами здесь

Создать массив A(n) и найти длину самойдлиной последовательности подряд идущих элементов
Задан числовой массив A.Найти длинну самой длинной последовательности подряд идущих элементов массива,которые равны нулю. Число N вводится...

Найти длину самой длинной последовательности подряд идущих нулевых элементов массива
Задан числовой массив A(n). Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю.

Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю
Задан одномерный массив. Найти длину самой длинной последовательности подряд идущих элементов массива,равных нулю. Написал на паскале нужно...

Рекурсия: найти в последовательности такой набор чисел, сумма которых равна 100
Всем привет! Нужна помощь с программкой. Можете пожалуйста обьяснить, с чего начинать? Дана последовательность из ста целых чисел....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru