枚举一个集合的所有有效子集
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
/*
二进制数的“子集”
这里的“子集“指的是对于原二进制数中1的选择,如对于一个二进制数01101,有3个1,则有8个“子集”,分别为:00000,00001,00101,01000,01100,01001,00101,01101。
*/
//输出十进制对应的二进制数(模板)
void print(int n) {
printf("%d:", n);
//输出4个数位的二进制数
for (int i = 3; i >= 0; i--) //由高到低位
printf("%d", n >> i & 1);
printf("\n");
}
//输出st的所有二进制子集
//一种是遍历所有情况,判断其是否为子集,如01101需要判断00000到01101。
void sub1(int st) {
for (int i = st - 1; i; i--)
if ((i & st) == i) {
// i是state的 **子集**
print(i);
}
}
//一种很巧妙的方法:但我不会证明其正确性
void sub2(int st) {
for (int i = st & (st - 1); i; i = (i - 1) & st) {
// i是state的 **子集**
print(i);
}
}
int main() {
int st = 13; // 01101
sub1(st);
printf("==================================\n");
sub2(st);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2018-02-10 大数据统计分析平台之三、Kibana安装和使用
2018-02-10 大数据统计分析平台之一、Kafka单机搭建
2012-02-10 在Linux下配置squid[转载,待测试]
2012-02-10 内网用ssh连接linux很慢
2012-02-10 centos5.5 64位提升sata硬盘速度
2012-02-10 CentOS 64bit密码正确却无法登录系统
2012-02-10 Linux的内存释放脚本