标题:[求助]列出子集( C )
只看楼主
henrya2
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-4-8
 问题点数:0 回复次数:2 
[求助]列出子集( C )
#include <stdio.h>
#include <string.h>

void ListSubsets(char *set);

int main()
{
char set[80];

printf("Enter the elements of a set\n");
scanf("%s",set);

ListSubsets(set);
return 0;
}

/*process x^y*/
int power(int x,int y)
{
int i,m=1;
for(i=1;i<=y;i++)
{
m*=x;
}
return m;
}
void ListSubsets(char *set)
{
int i,j,k,n;
n=strlen(set);

/*To give a combination of a set,each element either belongs to it(1) or not belong in it(0).*/
/*Example:
C B A
empty set 0 0 0
A 0 0 1
B 0 1 0
AB 0 1 1
C 1 0 0
AC 1 0 1
BC 1 1 0
ABC 1 1 1
*/

for(i=0;i<= power(2,n)-1;i++)
{
putchar('{');
/*shift k left 1 bit,eg:1, 10, 100, ...*/
for(j=0, k=1;j<n;k=k<<1, j++)
{
if(k&i) printf("%c",set[j]);
/*When the binary digit matches, print it*/
}
putchar('}');

printf("\n");
}
}
这个程序列出一个集合的所有子集(其实就是求出所有的组合).

不知道怎样用递归来实现?
搜索更多相关主题的帖子: 子集 int set char void 
2006-06-18 19:13
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
最好先在本坛或google上搜索。
类似问题肯定出现过不止一次。
记得C语言贴吧那似乎也有过。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-18 20:08
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-18 21:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-73196-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052720 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved