Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Перебор неповторяющихся сочетаний - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить слово слева от курсора. http://www.cyberforum.ru/cpp-beginners/thread568426.html
case 107:{ /*Ctrl-Del*/ i=xk+xt; m=0; while((*(rs+i)==' ')|(*(rs+i)=='\n')|(*(rs+i)=='\0'))i++; while((*(rs+i)!='...
C++ Рисование ломанной линии и фиксирование её клавишей Есть такая задачка: Рисуется ломаная линия. Фиксирование первых и очередных узлов осуществляется нажатием клавиши ''Enter'', фиксирование последнего узла двойным нажатием клавиши ''Enter''. Для... http://www.cyberforum.ru/cpp-beginners/thread568400.html
C++ Структура - спортсмен-многоборец
10 спортсменов многоборцев принимают участие в соревнования по пяти видам спорта.по каждому виду спорта спортсмен набирает определенное количество очков.спортсмену присваивается звание мастера,если...
Перевернуть hex C++
как перевернуть число? чтобы 0xA5 стало 0х5А
C++ Сдвиг столбцов влево циклически - матрица http://www.cyberforum.ru/cpp-beginners/thread568369.html
Приветствую. Хотелбы узнать как реализовать такое что бы, найдя максимальный элемент в матрице, сдвинуть столбец с максимальным элементом на место первого столбца, ну и естественно остальные остолбцы...
C++ как правильно юзать str() // stringstream::str #include <iostream> #include <sstream> #include <string> using namespace std; int main () { stringstream oss; string mystr; подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1639 / 1011 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
08.05.2012, 17:09
Цитата Сообщение от David Villa Посмотреть сообщение
А на счет рекурсивной функции нельзя ли чуть подробней?
Можно... Принцип действия простой: функция вызывает сама себя два раза, каждый раз передавая массив без первого элемента. При этом сначала текущий первый элемент в набор не включается, а во второй - включается. Вот только на каждом вызове придётся "тащить" ещё и все предыдущее состояние, чтобы каждый раз печатать полный набор значений, что несколько более громоздко:
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
using std::vector;
using std::cout;
using std::endl;
 
void PrintVector(const vector<int> &v)
{
    for_each(v.begin(), v.end(), [] (int val) {cout << val << ' ';});  // это C++11, по-старому можно записать как for(size_t i=0; i<v.size(); ++i) cout << v[i] << ' ';
    cout << endl;
}
 
void PrintAllCombinations(const int array[], size_t N, vector<int> &v)
{
    if(N==0)
    {
        PrintVector();
        return;
    }
    PrintAllCombinations(array+1, N-1, v);
    v.push_back(array[0]);
    PrintAllCombinations(array+1, N-1, v);
    v.pop_back();
}
 
void foo()
{
    const int N = 7;
    const int a[N] = {1, 2, 3, 4, 5, 6, 7};
    vector<int> tmp;
    tmp.reserve(N);
    PrintAllCombinations(a, N, tmp);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru