[求助]列出子集( 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");
}
}
这个程序列出一个集合的所有子集(其实就是求出所有的组合).
不知道怎样用递归来实现?