标题:[求助]列出子集( C )
取消只看楼主
henrya2
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-4-8
 问题点数:0 回复次数:0 
[求助]列出子集( 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



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




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

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