其他分享
首页 > 其他分享> > 打表技巧—全组合

打表技巧—全组合

作者:互联网

假如我们想要一个数组{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