用C语言编写给定一个集合A,求A的所有非空子集。
给定一个集合A,求A的所有非空子集。例如A={a,b}时,则它的所有非空子集为{a},{b},{a,b}。集合A不空,并且A的元素个数不超过10个。[输入]有多组测试数据...
给定一个集合A,求A的所有非空子集。例如A={a,b}时,则它的所有非空子集为{a},{b},{a,b}。集合A不空,并且A的元素个数不超过10个。
[输入]
有多组测试数据,每组测试数据为一行。
每行表示一个集合,集合由一对大括号括起来,集合之间的元素用一个逗号隔开。之间没有任何的空白字符。已经知道集合元素按字典顺序排列。
[输出]
每组测试数据输出为2^n-1行,每行表示一个非空子集。子集与子集的顺序参考输出样列。(对应的二进制由小到大)
每个子集的元素按字典顺序排列,元素之间用逗号隔开,没有任何的空白字符。子集由一对大括号括起来。
[输入样列]
{a,b,c}
[输出样例]
{a}
{b}
{a,b}
{c}
{a,c}
{b,c}
{a,b,c} 展开
[输入]
有多组测试数据,每组测试数据为一行。
每行表示一个集合,集合由一对大括号括起来,集合之间的元素用一个逗号隔开。之间没有任何的空白字符。已经知道集合元素按字典顺序排列。
[输出]
每组测试数据输出为2^n-1行,每行表示一个非空子集。子集与子集的顺序参考输出样列。(对应的二进制由小到大)
每个子集的元素按字典顺序排列,元素之间用逗号隔开,没有任何的空白字符。子集由一对大括号括起来。
[输入样列]
{a,b,c}
[输出样例]
{a}
{b}
{a,b}
{c}
{a,c}
{b,c}
{a,b,c} 展开
1个回答
展开全部
#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;i<number;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;i<n;i++)
{
if(a[i]==2)
{
a[i]=0;
a[i+1]++;
}
}
}
真的很用心!!!
#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;i<number;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;i<n;i++)
{
if(a[i]==2)
{
a[i]=0;
a[i+1]++;
}
}
}
真的很用心!!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询