i trying generate subsets of set in non recursive manner. code:
#include <stdio.h> main() { int no_of_element, no_of_subset, i, j, start, index, a[50], x; printf("enter size of main set :"); scanf("%d", &no_of_element); printf("enter elements of main set :"); (x = 0; x < no_of_element; x++) scanf("%d", &a[x]); printf("the subsets :\n"); (no_of_subset = 1; no_of_subset <= no_of_element; no_of_subset++) { (start = 0; start <= no_of_element - no_of_subset; start++) { if (no_of_subset == 1) printf("%d\n", a[start]); else { index = start + no_of_subset - 1; (j = index; j < no_of_element; j++) { (i = start; < index; i++) { printf("%d\t", a[i]); } printf("%d\n", a[j]); } } } } } this output:
enter size of main set :4 enter elements of main set :1 2 3 4 subsets : 1 2 3 4 1 2 1 3 1 4 2 3 2 4 3 4 1 2 3 1 2 4 2 3 4 1 2 3 4 this code isn't generating subset (1,3,4). please me fix ?
just fun, dit scratch. trick let counter go through possible subsets, each being combination of bits.
in case, use unsigned long int handle sets of 64 elements:
#include <stdio.h> void print_subset(int subset, int *set) { int pos=0; printf("subset %d = ", subset); while (subset) { if (subset & 1) { printf("%d ", set[pos]); } subset >>= 1; pos++; } printf("\n"); } int main() { int no_of_element,no_of_subset,x,a[50]; printf("enter size of main set :"); scanf("%d",&no_of_element); printf("enter elements of main set :"); for(x=0;x<no_of_element;x++) scanf("%d",&a[x]); no_of_subset= (1 << no_of_element); printf("there %d subsets\n", no_of_subset); (; no_of_subset--;) { print_subset(no_of_subset, a); } } when run produces
enter size of main set :4 enter elements of main set :1 2 3 4 there 16 subsets subset 15 = 1 2 3 4 subset 14 = 2 3 4 subset 13 = 1 3 4 subset 12 = 3 4 subset 11 = 1 2 4 subset 10 = 2 4 subset 9 = 1 4 subset 8 = 4 subset 7 = 1 2 3 subset 6 = 2 3 subset 5 = 1 3 subset 4 = 3 subset 3 = 1 2 subset 2 = 2 subset 1 = 1 subset 0 =
Comments
Post a Comment