QUESTION
Power Set Power set P(S) of a set S is the set of all subsets of S. For example S = {a, b, c} then P(s) = {{}, {a}, {b}, {c}, {a,b}, {a, c}, {b, c}, {a, b, c}}.\n\nIf S has n elements in it then P(s) will have 2^n elements\n\n\nAlgorithm:\n\nInput: Set[], set_size\n1. Get the size of power set\n powet_set_size = pow(2, set_size)\n2 Loop for counter from 0 to pow_set_size\n (a) Loop for i = 0 to set_size\n (i) If ith bit in counter is set\n Print ith element from set for this subset\n (b) Print seperator for subsets i.e., newline\nExample:\n\nSet = [a,b,c]\npower_set_size = pow(2, 3) = 8\nRun for binary counter = 000 to 111\n\nValue of Counter Subset\n 000 -> Empty set\n 001 -> a\n 011 -> ab\n 100 -> c\n 101 -> ac\n 110 -> bc\n 111 -> abc.
ANSWER
#include <stdio.h>
#include <math.h>
#include <string.h>
void printPowerSet(char *set, int set_size)
{
/*set_size of power set of a set with set_size
n is (2**n -1)*/
unsigned int pow_set_size = pow(2, set_size);
int counter, j;
/*Run from counter 000..0 to 111..1*/
for(counter = 0; counter < pow_set_size; counter++)
{
for(j = 0; j < set_size; j++)
{
/* Check if jth bit in the counter is set
If set then pront jth element from set */
if(counter & (1<<j))
printf("%c", set[j]);
}
printf("\n");
}
}
/*Driver program to test printPowerSet*/
int main()
{
char set[20] ;
scanf("%s",set);
printPowerSet(set, strlen(set));
getchar();
return 0;
}