预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

/* 我是用C++写的,cin是输入,相当于scanf,cout是输出,相当于printf。 集合中每个元素在构成每个子集的过程中都有取与不取两种结果,以下算法巧妙的利用了整数在内存中以0、1存储的特点, i的二进制中第n位是0表示第n个元素不取,1表示取,子集但不调试看看,不是很难理解 */ #include<iostream> usingnamespacestd; intqiuMiJi(inta[],intlen) { inti,j; boolflag=false; cout<<"{\n"; cout<<"{NULL}\n"; for(i=1;!flag;i++) { cout<<"{"; flag=true; for(j=0;j<len;j++) { //(i>>j)&1得出第j位是0还是1 if((i>>j)&1) //‘>>’右移运算符,i>>j表示i右移j位,详见C程序设计学习辅导(没有上过的那本)P197 cout<<a[j]<<""; //‘&’按位与运算,详见C程序设计学习辅导(没有上过的那本)P193 else flag=false; //当到达最后一个子集时i用二进制表示每个位都是1,没有进入过else,结束内层循环时flag=true,然后外层循环也结束 } cout<<"}\n"; } cout<<"}\n"; returni; } intmain() { ints[]={1,2,3,4}; intamount=qiuMiJi(s,4); cout<<"总共有"<<amount<<"个子集" <<endl; return0; }