### math combinations

hello
i'm trying to make combinations.
i have a bool array, and want to output all the possible combinations from it.
i want an output like:
 ```true; false; false; false; false; false; false; false; false; false. false; true; false; false; false; false; false; false; false; false. true; true; false; false; false; false; false; false; false; false. true; true; true; false; false; false; false; false; false; false. false; false; false; false; false; false; false; false; false; true. true; true; true; true; true; true; true; true; true; true. ```

and so on.
i think it will give some thousand of combinations.

could someone give me a light on how to start it?
 ``123456`` ``````if( BOOL[POSITION] ) { std::cout << "true; " << std::flush; } else { std::cout << "false; " << std::endl; }``````

Actually I see what you are trying to do now..and the possible combinations is !10 = 3628800

There are probably a few ways to do that by like reanaging the array that many times I guess I'll try and think of a way to do that
Last edited on
sorry, i think i did not explain it right.
my problem is not with the output, but with creating all possible combinations.
Maybe try this http://www.cplusplus.com/reference/algorithm/next_permutation/
Just saw it under the algorithms
Last edited on
next_permutation won't help in that case.
 ``123456789101112131415`` ``````#include #include #include int main() { const int n = 10;//How many bools you have std::cout << std::boolalpha; //Show bools as true/false for(unsigned long x = 0; x < 1ul << n; ++x) { std::bitset combination(x); for (int i = 0; i < n; ++i) std::cout << std::setw(5) << combination[i] << "; "; std::cout << std::endl; } }`````` ```false; false; false; false; false; false; false; false; false; false; true; false; false; false; false; false; false; false; false; false; false; true; false; false; false; false; false; false; false; false; true; true; false; false; false; false; false; false; false; false; false; false; true; false; false; false; false; false; false; false; true; false; true; false; false; false; false; false; false; false; false; true; true; false; false; false; false; false; false; false; true; true; true; false; false; false; false; false; false; false; false; false; false; true; false; false; false; false; false; false; true; false; false; true; false; false; false; false; false; false; false; true; false; true; false; false; false; false; false; false; true; true; false; true; false; false; false; false; false; false; //etc... //There is 1024 lines```
Sample with n=8 (ideone does not like large outputs): http://ideone.com/hrsABB

EDIT: Fancier output. Stolen from LB :P
EDIT 2: More black magic
Last edited on
I created a solution show me you are trying and I might show you it =p

here is a snippet of the output
 ```true; true; true; true; true; true; true; true; true; true. false; true; true; true; true; true; true; true; true; true. true; false; true; true; true; true; true; true; true; true. true; true; false; true; true; true; true; true; true; true. true; true; true; false; true; true; true; true; true; true. true; true; true; true; false; true; true; true; true; true. true; true; true; true; true; false; true; true; true; true. true; true; true; true; true; true; false; true; true; true. true; true; true; true; true; true; true; false; true; true. true; true; true; true; true; true; true; true; false; true. true; true; true; true; true; true; true; true; true; false. false; false; true; true; true; true; true; true; true; true. false; true; false; true; true; true; true; true; true; true. false; true; true; false; true; true; true; true; true; true. false; true; true; true; false; true; true; true; true; true. false; true; true; true; true; false; true; true; true; true. false; true; true; true; true; true; false; true; true; true. false; true; true; true; true; true; true; false; true; true. false; true; true; true; true; true; true; true; false; true. false; true; true; true; true; true; true; true; true; false. true; false; false; true; true; true; true; true; true; true. true; false; true; false; true; true; true; true; true; true. true; false; true; true; false; true; true; true; true; true. true; false; true; true; true; false; true; true; true; true. true; false; true; true; true; true; false; true; true; true. true; false; true; true; true; true; true; false; true; true. true; false; true; true; true; true; true; true; false; true. true; false; true; true; true; true; true; true; true; false. true; true; false; false; true; true; true; true; true; true. true; true; false; true; false; true; true; true; true; true. true; true; false; true; true; false; true; true; true; true. true; true; false; true; true; true; false; true; true; true. true; true; false; true; true; true; true; false; true; true. true; true; false; true; true; true; true; true; false; true. true; true; false; true; true; true; true; true; true; false. true; true; true; false; false; true; true; true; true; true. true; true; true; false; true; false; true; true; true; true. true; true; true; false; true; true; false; true; true; true. true; true; true; false; true; true; true; false; true; true. true; true; true; false; true; true; true; true; false; true. true; true; true; false; true; true; true; true; true; false. true; true; true; true; false; false; true; true; true; true. true; true; true; true; false; true; false; true; true; true. true; true; true; true; false; true; true; false; true; true. true; true; true; true; false; true; true; true; false; true. true; true; true; true; false; true; true; true; true; false. true; true; true; true; true; false; false; true; true; true. true; true; true; true; true; false; true; false; true; true. true; true; true; true; true; false; true; true; false; true. true; true; true; true; true; false; true; true; true; false. true; true; true; true; true; true; false; false; true; true. true; true; true; true; true; true; false; true; false; true. true; true; true; true; true; true; false; true; true; false. true; true; true; true; true; true; true; false; false; true. true; true; true; true; true; true; true; false; true; false. true; true; true; true; true; true; true; true; false; false. false; false; false; true; true; true; true; true; true; true. false; false; true; false; true; true; true; true; true; true. false; false; true; true; false; true; true; true; true; true. false; false; true; true; true; false; true; true; true; true. false; false; true; true; true; true; false; true; true; true. false; false; true; true; true; true; true; false; true; true. false; false; true; true; true; true; true; true; false; true. false; false; true; true; true; true; true; true; true; false. false; true; false; false; true; true; true; true; true; true. false; true; false; true; false; true; true; true; true; true. false; true; false; true; true; false; true; true; true; true. false; true; false; true; true; true; false; true; true; true. false; true; false; true; true; true; true; false; true; true. false; true; false; true; true; true; true; true; false; true. false; true; false; true; true; true; true; true; true; false. false; true; true; false; false; true; true; true; true; true. false; true; true; false; true; false; true; true; true; true. false; true; true; false; true; true; false; true; true; true. false; true; true; false; true; true; true; false; true; true. false; true; true; false; true; true; true; true; false; true. false; true; true; false; true; true; true; true; true; false. false; true; true; true; false; false; true; true; true; true. false; true; true; true; false; true; false; true; true; true. false; true; true; true; false; true; true; false; true; true. false; true; true; true; false; true; true; true; false; true. false; true; true; true; false; true; true; true; true; false. false; true; true; true; true; false; false; true; true; true. false; true; true; true; true; false; true; false; true; true. false; true; true; true; true; false; true; true; false; true. false; true; true; true; true; false; true; true; true; false. false; true; true; true; true; true; false; false; true; true. false; true; true; true; true; true; false; true; false; true. false; true; true; true; true; true; false; true; true; false. false; true; true; true; true; true; true; false; false; true. false; true; true; true; true; true; true; false; true; false. false; true; true; true; true; true; true; true; false; false. true; false; false; false; true; true; true; true; true; true. true; false; false; true; false; true; true; true; true; true. true; false; false; true; true; false; true; true; true; true. true; false; false; true; true; true; false; true; true; true. true; false; false; true; true; true; true; false; true; true. true; false; false; true; true; true; true; true; false; true. true; false; false; true; true; true; true; true; true; false. true; false; true; false; false; true; true; true; true; true. true; false; true; false; true; false; true; true; true; true. true; false; true; false; true; true; false; true; true; true. true; false; true; false; true; true; true; false; true; true. true; false; true; false; true; true; true; true; false; true. true; false; true; false; true; true; true; true; true; false. true; false; true; true; false; false; true; true; true; true. true; false; true; true; false; true; false; true; true; true. true; false; true; true; false; true; true; false; true; true. true; false; true; true; false; true; true; true; false; true. true; false; true; true; false; true; true; true; true; false. true; false; true; true; true; false; false; true; true; true. true; false; true; true; true; false; true; false; true; true. true; false; true; true; true; false; true; true; false; true. true; false; true; true; true; false; true; true; true; false. true; false; true; true; true; true; false; false; true; true. true; false; true; true; true; true; false; true; false; true. true; false; true; true; true; true; false; true; true; false. true; false; true; true; true; true; true; false; false; true. true; false; true; true; true; true; true; false; true; false. true; false; true; true; true; true; true; true; false; false. true; true; false; false; false; true; true; true; true; true. Total permuations: 1023```
Last edited on
I created a solution too and posted it. Now try to understand it :)
Next permutation worked for me
your code is a bit nicer though
 ``1234567891011121314151617181920212223242526272829303132333435363738`` ``````#include #include #include #include void output( std::vector array ) { short count = 0; for( std::vector::iterator it = array.begin(); it != array.end(); ++it ) { std::cout << *it << std::flush; if( count < 9 ) { std::cout << "; " << std::flush; } else { std::cout << "." << std::endl; } ++count; } } int main() { std::vector array( 10 , true ); short permutations = 0; std::cout << std::boolalpha; for( unsigned int i = 0; i < 10; i++ ) { do { output( array ); ++permutations; } while( std::next_permutation( array.begin() , array.end() ) ); array[ i ] = false; } output( array ); ++permutations; std::cout << "Total permuations: " << permutations << std::endl; }``````

UPDATED CODE[/edit]
Last edited on
are you guys competing? :P
thanks for the help, i got the idea :)
Ah, if you help next_permutation a little it would work too. I thought it would take more work...
And either you are missing "all false" combination (btw, it is combinations, not permutations) or your permutations counter is off by one.

EDIT: You are missing "all false" combination

Edit 2: Sorry, You were right about permutation. Shame on me.
Last edited on
well if it is combination I am completely wrong I did it for the permuatations. and yeah sorry forgot to put the all false in there I made it stop right before that.
http://www.mathsisfun.com/combinatorics/combinations-permutations.html
website wrote:
If the order doesn't matter, it is a Combination.
If the order does matter it is a Permutation.

Also I didn't know about boolalpha thanks I'll update my code asap
Last edited on
Recursive:
 ``123456789101112131415161718192021222324252627282930313233`` ``````#include #include #include void print( const std::vector& seq ) { for( bool b : seq ) std::cout << std::setw(5) << b << "; " ; std::cout << '\n' ; } void generate( std::vector& seq, std::vector::iterator from ) { if( from == seq.end() ) print(seq) ; else { *from = false ; generate( seq, from+1 ) ; *from = true ; generate( seq, from+1 ) ; } } void generate( std::size_t n ) { std::vector seq(n) ; generate( seq, seq.begin() ) ; } int main() { std::cout << std::boolalpha ; generate(5) ; // 2^5 sequences }``````

http://ideone.com/irW7qE

Last edited on
Topic archived. No new replies allowed.