Tablica kombinacji

0

mam pewien problem z funkcja f(tab[][], n). generującą tablicę (paramet n -> długośc bitów) wszystkich kombinacji. Format tablicy ma być następujący:

Tab[0-n][nr. kombinacji]

np. dla m=2

00 (tab[0][0]=0;tab[1][0]=0)
01 (tab[0][1]=0;tab[1][1]=1)
10 (tab[0][2]=1;tab[1][2]=0)
11 (tab[0][3]=1;tab[1][3]=1)

dla m=3

000 (tab[0][0]=0;tab[1][0]=0;tab[2][0]=0)
001 (tab[0][1]=0;tab[1][1]=0;tab[2][1]=1)
010 (tab[0][2]=0;tab[1][2]=1;tab[2][2]=0)
.....
111 (tab[0][7]=1;tab[1][7]=1;tab[2][7]=1;)

o ile dla m=2,3,4...można to zrobić ręcznie to dla m=15 już ....trudniej..... a funkcja musi działać dla m-(2-18). Jak najprościej napisać taką funkcję generującą wszystkie kombinację? może jest już jakaś zaimplementowana w c++ visual funkcja (szukalem ale nic nie znalazłem) Z góry bardzo dziękuję za pomoc.

0
  • Bardziej naturalne byłoby indeksowanie odwrotne (moim zdaniem): tab[nr_kombinacji][nr_bitu].
  • Może lepiej użyć vectora?
  • A najlepiej, to w ogóle nie robić tablic, tylko na gołych bitach?
  • A w ogóle, wiesz, że dla m=18 będzie tego 2^18??? Dużo.

Podsumowując: co naprawdę chcesz zrobić? (Bo może to problem XY)

1

A nie wystarcz zrobić funkcji: int elem_komb(int m, int nr_bitu, int nr_kombinacji)?

Ale jak się upierasz, to możesz wypełnić tablicę tak:

for(int nr_kombinacji = 0; nr_kombinacji < (1<<m); ++nr_kombinacji) {
    for(int nr_bitu = 0; nr_bitu < m; ++nr_bitu) {
        tab[nr_bitu][nr_kombinacji] = ((nr_kombinacji & (1<<(m-nr_bitu-1))) != 0); // tu był błąd, poprawiłem...
    }
}

Sprawdź, czy działa, bo nie testowałem...

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