szukanie sumy podzbioru metodą bruteforce

0

witam!

chciałbym napisać program, który w podanym zbiorze liczb tab wygeneruje wszystkie możliwe kombinacje oraz kolejno będzie je sumował aby sprawdzić czy dana kombinacja równa jest dokładnie połowie sumy wszystkich elementów.
przykład:
dany mamy zbiór 6 elementów uporządkowanych nierosnąco:
12 8 4 4 2 2
suma=32
a=suma/2=16

zatem wynikiem będzie podział elementów zbioru na dwa:
12 4
8 4 2 2
lub

12 2 2
8 4 4

Wyniki będą generowane np. w tablicy log[n], z uwagi na to, że elementy są uporządkowane nierosnąco log[0] zawsze będzie miał wartość 1, a rozpatrzyć trzeba wszystkie pozostałe 2n-1 przypadków.
Mam problem z funkcją która będzie generowała kolejne przypadki.

dla n=6
k=2n-1=32 przypadki
np.
i=0 to k do

  1. 100000
  2. 110000
  3. 101000
  4. 111000
  5. 100100
  6. 101100
    .
    k. 111111

Proszę o jakąś podpowiedź i z góry dziękuję:)

0
#include <stdio.h>
 
int main(){
        int t[6]={12,8,4,4,2,2};
        int log[(12+8+4+4+2+2)+1]={0};
        int b[6+1]={0};
        int i,s;
        while(b[6]==0){
                for(i=0;i<6;i++)printf("%d",b[i]);
                s=0;
                for(i=0;i<6;i++)
                        if(b[i])
                                s+=t[i];
                log[s]++;
                printf("%5d\n",s);
                
                i=0;
                while(1)
                        if(0!=(b[i]=!b[i++])) 
                                break;
        }
        for(i=0; i<=32;i++)printf("%3d",i);printf("\n");
        for(i=0;i<=12+8+4+4+2+2;i++)
                printf("%3d",log[i]);
        return(0);
} 

Od naturalnego kodu dwójkowego szybszy byłby kod Graya

1 użytkowników online, w tym zalogowanych: 0, gości: 1