#include #include 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 target, int *set, int set_size, int index, int *current_path, int path_len) { if (target == 0) return (print_subset(current_path, path_len)); if (index >= set_size) return; current_path[path_len] = set[index]; find_subsets(target - set[index], set, set_size, index + 1, current_path, path_len + 1); find_subsets(target, set, set_size, index + 1, current_path, path_len); } int main(int argc, char **argv) { int target; int *numbers; int *path; int size; int i; if (argc < 2) return (0); target = atoi(argv[1]); size = argc - 2; numbers = (int *)malloc(sizeof(int) * size); if (!numbers) return (1); path = (int *)malloc(sizeof(int) * size); if (!path) { free(numbers); return (1); } i = 0; while (i < size) { numbers[i] = atoi(argv[i + 2]); i++; } find_subsets(target, numbers, size, 0, path, 0); free(numbers); free(path); return (0); }