Форум программистов, компьютерный форум 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, 12:44
Тогда надо правильно писать вопрос. Перестановки (размещения) - одно, а сочетания - совсем другое. Сочетания сделать ещё проще. Исходным материалом служит массив с набором уникальных элементов (если исходные данные не соответствуют такому условию, их надо привести к такому виду). Поскольку любой элемент либо входит, либо не входит в данную комбинацию, общее число всех возможных сочетаний 2^N, где N - число элементов. В это число входит и пустое сочетание, в котором нет ни одного элемента. Если мы поставим каждому элементу в соответствие номер бита, то присутствие этого элемента в сочетании с заданным номером зависит от значения соответствующего бита:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using std::cout;
using std::endl;
 
void PrintCombination(const int array[], size_t N, size_t number)
{
    for(size_t i = 0; i<N; ++i)
        if(number & (1<<i))
            cout << array[i];
}
 
void foo()
{
    const size_t N = 7;
    const int a[N] = {1, 2, 3, 4, 5, 6, 7};
    for(size_t i=1; i<(1<<N); ++i)
        PrintCombination(a, N, i);
}
Как вариант, можно воспроизвести это обычной рекурсией без мороки с двоичной арифметикой.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru