子集生成 二进制表示

在集合表示法中, 1 << i 表示元素 i; S & (1<<j) 为真表示S和{j}的交集不为空,即S中含有j; S ^(1<<j)表示S中删除元素j。

#include <iostream> using namespace std; int n = 4; void subset() { for(int S = 0; S < (1<<n); S++) { cout << "S : " << S << " => "; for(int i = 0; i < n; i++) { if(S & (1<<i)) { cout << i << " "; } } cout << endl; } } int main() { subset(); }
输出结果:

S : 0 => S : 1 => 0 S : 2 => 1 S : 3 => 0 1 S : 4 => 2 S : 5 => 0 2 S : 6 => 1 2 S : 7 => 0 1 2 S : 8 => 3 S : 9 => 0 3 S : 10 => 1 3 S : 11 => 0 1 3 S : 12 => 2 3 S : 13 => 0 2 3 S : 14 => 1 2 3 S : 15 => 0 1 2 3


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值