linfeng24 发表于 2013-10-20 10:54
递归法,具体程序参考http://hi.baidu.com/hightch/item/f89f53d497643c1fd68ed01d
我刚刚写了一个:
/*===================================================================
=团队名称:IMA
=
=作者名称:飞哥
=
=工作单位:广东工业大学智能模型协会
=
=编写日期:2013年10月20日22:10
=
=完成日期:2013年22月20日22:14分
=
=修改人:
=
=修改日期:
=
=版本号 :Version1.0
=
=模块说明:此文件只是用于简单的N元素的所有子集输出,其中N<32,测试通过
=
=====================================================================*/
#include "stdio.h"
const unsigned long Map[]={
0x00000001,0x00000003,0x00000007,0x0000000f,//位图掩码
0x0000001f,0x0000003f,0x0000007f,0x000000ff,
0x000001ff,0x000003ff,0x000007ff,0x00000fff,
0x00001fff,0x00003fff,0x00007fff,0x0000ffff,
0x0001ffff,0x0003ffff,0x0007ffff,0x000fffff,
0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,
0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff};
/*函数声明*/
void show(unsigned long T,char N);
/*================================================================================
=函数名称:void main()
=
=传入参数:无
=
=返回参数:无
=
=函数说明:main函数
=
=================================================================================*/
void main()
{
unsigned long num=1;
char N;
printf("请输入要测试的元素个数:\t");
scanf("%d",&N);
for(;num<Map[N];num++)
{
show(num,N);
}//for
}//main
/*================================================================================
=函数名称:void show(unsigned long T,char N)
=
=传入参数:T:位测试,N:位长度
=
=返回参数:无
=
=函数说明:用于显示子集
=
=================================================================================*/
void show(unsigned long T,char N)
{
char i=0;
for(;i<=N;i++)
{
if(T&0x1)
{
printf("%c",'a'+i);
}//if
T=T>>1;
}//for
printf("\t");
}//show |