#include<stdio.h>
#include<string.h>
char s[50];
int index = 0;//标记选择后的字符下标
void reSort(char *pArray, int begin,int pLen , int len)
{
if (pLen == 0)
{
puts(s);
return;
}
for (int i = begin; i < len; i++)
{
s[index++] = pArray[i];
reSort(pArray, i + 1, pLen - 1, len);
index--;
}
}
int main()
{
char str[] = "abcd";
int len = strlen(str);
for (int i = 1; i <= len; i++)
reSort(str, 0, i, len);//从0开始选i个字符
getchar();
return 0;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void print_allSubSet(char arr[], int n)
{
if (n > 30)
{
printf("%d is too big\n", n);
return;
}
int total = (1 << n); // 1 << n ,n个元素共有2^n个子集,包括空集)
for (int j = 0; j < total; j++) // 每循环一次选出一个子集
{
printf("{ ");
int i = 0; // 每一次循环,i都重新置0;
int mask = j; // 序号j对应的是第(j+1)个子集。
while (mask > 0) // 通过移位的方式,直至mask的二进制形式中,所有位都为0。
{
if (mask & 1) // 若mask的二进制形式的最后一位非0,输出该位对应的数字。
printf("%c", arr[i]);
mask >>= 1; // mask右移一位
i++;
}
printf("}\n");
}
}
int main()
{
char arr[30] = "ABC";//000表示空集
//001表示只有D元素的集合
//111表示集合ABC
print_allSubSet(arr,strlen(arr));
getchar();
return 0;
}
#include&lt;stdio.h&gt; #include&lt;string.h&gt; char s[50];int index = 0;//标记选择后的字符下标void reSort(char *pArray, int begin,int pLen , int len){ if (pLen == 0) { puts(s); return; } for (i...