本文目錄一覽:
急!急!急!用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]++;
}
}
}
真的很用心!!!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159458.html