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

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

06.12.2009, 19:58. Показов 5240. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru