打表技巧—全组合
作者:互联网
假如我们想要一个数组{1,2,3}的全组合
理论上他应该是
\(\phi\)
{1}
{2}
{3}
{1 , 2}
{1 , 3}
{2 , 3}
{1 , 2 , 3}
怎么实现把这些都打出来呢?
我们需要一个基于位运算的思想
一个位上是0代表不选这个数,一个位上是1代表选这个数
那我们就可以把全组合用这样的方法写一下
000 001 010 100 011 110 101 111
这样就可以通过双重循环来实现全组合
外面一层循环枚举所有组合
内循环枚举要选几个
code
void sumb(){
int n ;
n = ...//( n是集合内元素的个数 )
int m = 1 << n ; //所有情况
for( int i = 0 ; i < m ; i ++ ){
for( int j = 0 ; j < n ; j ++ ){
if( i & ( j << 1 ) )
printf( "%d " , a [j] ) ;
}
puts( "" ) ;
}
}
标签:技巧,组合,int,位上,010,枚举,打表,循环 来源: https://www.cnblogs.com/TYubai/p/14522164.html