本文目录一览:
急!急!急!用C语言求{a,b,c,d,e,f}的非空子集,求算法
实现求{a,b,c,d,e,f}的所有非空子集。
由于集合个数只有6个,可以让i从1 到 2^6,如果i的二进制中某位为1则打印该元素。这样可产生所有组合情况。
int main()
{
char A[]="abcdef";
int i, j, t;
for(i=1; i16; i++) //遍历所有情况
{
for(j=0,t=i; j6; j++) //打印该组合
{
if(t1)putchar(A[j]); //该位为1则打印该元素
t = 1;
}
putchar('\n');
}
return 0;
}
C语言:实现输出任意一个字符数组的除空集之外的所有子集。
递归当然也可以,但for循环就足够了
求出所有的组合
n个里找1,n个里找2个,。。。n个里找n个。。。
核心问题就是n个里找m个
可以用二维数组的方式模拟求组合
m行n列,每行就是该字符串
选择时从第一行选择,每行只能选择前一行所选元素之后的元素
用C语言编写给定一个集合A,求A的所有非空子集。
#include stdio.h
#include string.h
#include math.h
void add(int *a,int n);
int main ()
{
char A[25];
gets(A);
int i,t=0,k=0,h,number,l=strlen(A);
int a[10]={1};
number=(l-1)/2;
h=pow(2,number)-1;
for(t=1;t=h;t++)
{
printf("{");
for(i=0;inumber;i++)
{
if(a[i])
{
if(k++)
printf(",");
printf("%c",i+97);
}
}
k=0;
printf("}\n");
add(a,number);
}
}
void add(int *a,int n)
{
int i;
a[0]++;
for(i=0;in;i++)
{
if(a[i]==2)
{
a[i]=0;
a[i+1]++;
}
}
}
真的很用心!!!