设计一个递归算法求含n个元素的集合的幂集并输出……(集合s的幂集指由s的所有子集组成的集合)
话说我完全不懂递归和迭代的不同啊喂……
这样大量的输出是用数组比较好_(:з」∠)_?!
完全没救了……脑细胞死绝罒 - 罒!!
救命……
[mw_shl_code=c,true]#include<stdio.h>
char ch[100];
void print(int n)
{
int i;
printf("{");
for(i=0;i<n;i++)
if(i!=n-1)
printf("%c, ",ch);
else
printf("%c",ch);
printf(" } \n");
return ;
}
void dfs(int n,int index,int hou)
{
char i;
print(n);
if(n==index)
{
return ;
}
for(i=hou;i<4;i++)
{
ch[n]=i+'a';
dfs(n+1,index,i+1);
}
}
int main()
{
dfs(0,4,0);
return 0;
}[/mw_shl_code]
#km给你搜了个。。虽然不利于锻炼自己思考的能力
[查看全文]
[mw_shl_code=c,true]#include <stdio.h>
#include <stdlib.h>
int a[10] = {0}, f[1000][1000] = {{0}}, lenF[1000] = {0}, lenL = 0;
int getF(int len, int N)
{
if(len > N)
{
return 0;
}
for(int i = 0; i < lenL; i++)
{
for(int j = 0;j < lenF; j++)
{
f[i + lenL][j] = f[j];
}
lenF[i + lenL] = lenF;
}
int t = lenL;
lenL = 2 * lenL + 1;
for(int i = t;i < lenL; i++)
{
f[lenF++] = a[len];
}
}
int main(int argc, char *argv[])
{
int N = 0;
scanf("%d", &N);
for(int i = 0; i < N; i++)
{
scanf("%d", &a);
}
for(int i = 0; i < N; i++)
{
getF(i, N);
}
for(int j = 0; j < lenL; j++)
{
printf("{");
for(int k = 0; k < lenF[j]; k++)
{
printf("%d, ", f[j][k]);
}
printf("}");
}
printf("\n");
}
[/mw_shl_code]
输入一个数字表示元素个数,再输入n个数表示各个元素值
输出了除空集外所有子集
例子:
输入一个数字表示元素个数,再输入n个数表示各个元素值
输出了除空集外所有子集
5
0 1 2 3 4 5
{0, }{0, 1, }{1, }{0, 2, }{0, 1, 2, }{1, 2, }{2, }{0, 3, }{0, 1, 3, }{1, 3, }{0, 2, 3, }{0, 1, 2, 3, }{1, 2, 3, }{2, 3, }{3, }{0, 4, }{0, 1, 4, }{1, 4, }{0, 2, 4, }{0, 1, 2, 4, }{1, 2, 4, }{2, 4, }{0, 3, 4, }{0, 1, 3, 4, }{1, 3, 4, }{0, 2, 3, 4, }{0, 1, 2, 3, 4, }{1, 2, 3, 4, }{2, 3, 4, }{3, 4, }{4, }
[查看全文]
