【原理】Y150
先取一个元素,如果决定要它就进入做分支,如果决定舍弃它就进入右分支,当取的元素个数要超过n时就输出。
【核心代码】
void GetPowerSet(int i,char A[],char B[])//i表示A中第几个字符,i从1开始
{
int k, n;
n = strlen(A);
if (i > n)
{
puts(B);
}
else
{
char ch = A[i - 1];//取第i个字符
k = strlen(B);//获取B的长度,准备写入B中
B[k] = ch;//先“取”,然后进入左分支
B[k + 1] = '\0';//要用puts输出必须在字符串末尾加结束符
GetPowerSet(i + 1, A, B);
B[k] = '\0';//再“舍”,进入右分支
GetPowerSet(i + 1, A, B);
}
}
【测试代码】
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxSize 100
void GetPowerSet(int i,char A[],char B[])//i表示A中第几个字符,i从1开始
{
int k, n;
n = strlen(A);
if (i > n)
{
puts(B);
}
else
{
char ch = A[i - 1];//取第i个字符
k = strlen(B);//获取B的长度,准备写入B中
B[k] = ch;//先“取”,然后进入左分支
B[k + 1] = '\0';//要用puts输出必须在字符串末尾加结束符
GetPowerSet(i + 1, A, B);
B[k] = '\0';//再“舍”,进入右分支
GetPowerSet(i + 1, A, B);
}
}
int main()
{
char A[maxSize] = "123";
char B[maxSize] = "\0";
GetPowerSet(1, A, B);
return 0;
}