0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
1

Рекурсия, все возможные подборы чисел 0,1,2

01.06.2014, 13:58. Показов 1279. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!(С++ Builder, есть одна кнопка и мемо) Суть в том, что нужно с помощью рекурсии сделать все возможные подборы чисел 0,1,2, так что бы одно и тоже число не повторялось(11,22,00),а вот как нужно например 102,210,120,201... если ещё раз 210 - нельзя, пока все возможные подборы не пройдут, и рекурсия должна остановится.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall TForm1::sButton1Click(TObject *Sender)
{   randomize();
    const int k=3;
    int *m,r;
    m = new int[k];
    for(int i=0; i<k; i++)
     { r=random(3);
       if(m[i-1]!=r)
           m[i]=r;
       if(m[i-1]==r)
           i--;
      }
    //проверка (вывод)
    for(int i=0; i<k; i++)
         {sMemo1->Text=sMemo1->Text+" "+m[i];
          if(i==k-1)
          sMemo1->Text=sMemo1->Text+" \n ";
         }
    }
Хоть совет какой та чтобы всё эта провернуть?!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 13:58
Ответы с готовыми решениями:

Рекурсия: напечатать все возможные сочетания заданных N натуральных чисел
3. Дано N различных натуральных чисел. Напечатать все возможные сочетания этих чисел.(выполнить с...

Рекурсия: Создайте процедуру, печатающую все возможные перестановки для целых чисел от 1 до N.
Создайте процедуру, печатающую все возможные перестановки для целых чисел от 1 до N. помогите...

Рекурсия: вывести все возможные размещения элементов массива
Дан массив char mas = { a, b, c, d, e, f, g, h, j, k }. Вывести на экран все возможные комбинации...

Рекурсия: вывести на дисплей все возможные подмножества множества
создать процедуру с помощью рекурсии множественное число{1,2,..,N}

11
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 15:56 2
Лучший ответ Сообщение было отмечено ЯРОКОС как решение

Решение

Никогда с рекурсией не дружил почему-то, пришлось напрячь извилины на освоение подхода. Но работает, вроде...
C++
1
2
3
4
5
6
7
8
9
10
11
void recurve_gen_combs( std::vector < std::string > & res, std::string & first, std::string next )
{
    next_permutation( next.begin( ), next.end( ) );
    res.push_back( next );
 
    if ( first == next )
    {
        return;
    }
    recurve_gen_combs( res, first, next );
}
C++
1
2
3
4
5
6
7
    using namespace std;
 
    vector < string > combs;
    string first( "012" );
 
    recurve_gen_combs( combs, first, first );
    copy( combs.begin( ), combs.end( ), ostream_iterator < string > ( cout, "\n" ) );
Миниатюры
Рекурсия, все возможные подборы чисел 0,1,2  
1
0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
01.06.2014, 16:20  [ТС] 3
Исходник кинуть можешь?! Ты Бог, нету слов! Давно занимаешься? Ты бабки уже такие можешь сшибать
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 16:49 4
Лучший ответ Сообщение было отмечено ЯРОКОС как решение

Решение

Есть только один Бог, но он не дает исходников.

Это и есть уже весь исходник, просто добавь воды запихни в консольное приложение. Для вывода в какое-нибудь мемо строчку с copy можно заменить на что-то такое:
C++
1
2
3
4
for( vector < string >::iterator it( combs.begin( ) ), end( combs.end( ) ); it != end; ++it )
{
    memo->Lines->Add( it->c_str( ) );
}
1
0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
01.06.2014, 17:52  [ТС] 5
Ругается на:
C++
1
2
3
4
5
6
7
using namespace std;
 
    vector < string > combs;   //[C++ Error] Unit1.cpp(15): E2141 Declaration syntax error
    string first( "012" );          //[C++ Error] Unit1.cpp(16): E2141 Declaration syntax error
 
    recurve_gen_combs( combs, first, first );   //[C++ Error] Unit1.cpp(18): E2238 Multiple declaration for 'first'
    copy( combs.begin( ), combs.end( ), ostream_iterator < string > ( cout, "\n" ) ); //[C++ Error] Unit1.cpp(18): E2238 Multiple declaration for 'first'
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 18:09 6
Ну, дык, а кто инклуды подключать будет?
C++
1
2
3
#include <vector>
#include <algorithm>
#include <string>
1
0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
01.06.2014, 18:21  [ТС] 7
С ними ещё не работал, нуб пока)
Так должно быть?ругается.
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
//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
#include <vector>
#include <algorithm>
#include <string>
//---------------------------------------------------------------------------
using namespace std;
    vector <string> combs;
    string first( "012" );
 
    recurve_gen_combs( combs, first, first );
    copy( combs.begin( ), combs.end( ), ostream_iterator < string > ( cout, "\n" ) );
void recurve_gen_combs( std::vector < std::string > & res, std::string & first, std::string next )
{
    next_permutation( next.begin( ), next.end( ) );
    res.push_back( next );
 
    if ( first == next )
    {
        return;
    }
    recurve_gen_combs( res, first, next );
}
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 18:44 8
omg... но с консольными приложениями-то работал? Имя функции main ничего не навевает?
1
0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
01.06.2014, 18:57  [ТС] 9
и нет(
C++
1
2
3
4
5
int main(int argc, char* argv[])
{
        recurve_gen_combs( combs, first, first );
        return 0;
}
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 19:02 10
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
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <cstdlib>
 
void recurve_gen_combs( std::vector < std::string > & res, std::string & first, std::string next )
{
    next_permutation( next.begin( ), next.end( ) );
    res.push_back( next );
 
    if ( first == next )
    {
        return;
    }
    recurve_gen_combs( res, first, next );
}
 
int main(int argc, char* argv[])
{
    using namespace std;
 
    vector < string > combs;
    string first( "012" );
 
    recurve_gen_combs( combs, first, first );
    copy( combs.begin( ), combs.end( ), ostream_iterator < string > ( cout, "\n" ) );
    
    cout << "\n\n";
    system( "pause" );
    return 0;
}
1
0 / 0 / 1
Регистрация: 19.03.2012
Сообщений: 21
01.06.2014, 19:05  [ТС] 11
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
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <cstdlib>
void recurve_gen_combs( std::vector < std::string > & res, std::string & first, std::string next )
{
    next_permutation( next.begin( ), next.end( ) );    //[C++ Error] Unit1.cpp(9): E2268 Call to undefined function 'next_permutation'
    res.push_back( next );
 
    if ( first == next )
    {
        return;
    }
    recurve_gen_combs( res, first, next );
}
int main(int argc, char* argv[])
{
    using namespace std;
    vector < string > combs;
    string first( "012" );
    recurve_gen_combs( combs, first, first );
    copy( combs.begin( ), combs.end( ), ostream_iterator < string > ( cout, "\n" ) ); //[C++ Error] Unit1.cpp(27): E2451 Undefined symbol 'ostream_iterator'  + [C++ Error] Unit1.cpp(27): E2108 Improper use of typedef 'string'  + [C++ Error] Unit1.cpp(27): E2285 Could not find a match for 'copy<_InputIter,_OutputIter>(string *,string *,undefined)'
    cout << "\n\n";
    system( "pause" );
    return 0;
}
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.06.2014, 20:32 12
Не, я понимаю, конечно, что можно вообще не вникать - на форуме все разжуют и в рот положат. Но только так не может продолжаться вечно. Надо уже включаться в работу, иначе люди утратят интерес к помощи тебе.

Добавляем инклуд #include <iterator> и специфицируем вызов std::next_permutation( next.begin( ), next.end( ) );

Добавлено через 44 секунды
Кстати, вот этот ресурс может оказаться для тебя чрезвычайно полезен - http://www.cplusplus.com/
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 20:32
Помогаю со студенческими работами здесь

Рекурсия: Выведите на экран все возможные последовательности прохождения лабиринта
Лабиринт представлен двумерным массивом NxN из нулей и единиц,нулевые элементы считаются...

Рекурсия: вывести все возможные варианты расположения элементов массива без повторов
Доброго времени суток.Объясните пожалуйста в чем ошибка.Есть массив,нужно что бы программа вывела...

Дано n натуральных чисел. Определить все возможные перестановки этих чисел
дано n натуральных чисел. определить все возможные перестановки этих чисел C#

Дано n различных чисел, напечатать все возможные перестановки этих чисел
здраствуйте! пожалуйста помогите решить одну задачу (Дано n различных чисел, напечатать все...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru