#include "powerset.h" void print_subset(int *subset, int size) { int i; i = 0; while (i < size) { printf("%d", subset[i]); if (i < size - 1) printf(" "); i++; } printf("\n"); } void find_subsets(int *set, int set_size, int target, int *subset, int subset_size, int index) { int current_sum; int i; if (index == set_size) { current_sum = 0; i = 0; while (i < subset_size) { current_sum += subset[i]; i++; } if (current_sum == target) print_subset(subset, subset_size); return ; } find_subsets(set, set_size, target, subset, subset_size, index + 1); subset[subset_size] = set[index]; find_subsets(set, set_size, target, subset, subset_size + 1, index + 1); } int main(int argc, char **argv) { int *set; int *subset; int target; int set_size; int i; if (argc < 2) return (1); target = atoi(argv[1]); set_size = argc - 2; set = malloc(sizeof(int) * set_size); if (!set) return (1); subset = malloc(sizeof(int) * set_size); if (!subset) { free(set); return (1); } i = 0; while (i < set_size) { set[i] = atoi(argv[i + 2]); i++; } find_subsets(set, set_size, target, subset, 0, 0); free(set); free(subset); return (0); }