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

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

06.12.2009, 19:58. Показов 5194. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru