Kombinacje x-elementowych danego zbioru

Kombinacje x-elementowych danego zbioru
K9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Witam.
Zastanawiam się jak rozgryźć pewien problem a mianowicie chciałbym aby mój program wypisywał wszystkie możliwe kombinacje x-elementowych z danego zbioru.
Mam zbiór: {a,b,c,d}, program pyta Nas o ilość elementów kombinacji;
Wpisuje np. 3:

Kopiuj
aaa
aab
aac
aba
...
cca
ccb
ccc

wpisuje np. 2:

Kopiuj
aa
ab
ac
ba
bb
bc
ca
cb
cc

Powyższe wyniki otrzymałem poprzez zagnieżdżanie pętli for:

Kopiuj
 char t[3] = "abc";
    for (i = 0; i < 3; i++)
     for (j = 0; j < 3; j++)
        for (k = 0; k < 3; k++)

Na pewno jest jakiś sposób aby to zautomatyzować bo gdy użytkownik będzie chciał utworzyć 5elementową kombinację to musiałbym użyć 5 for i w dodatku musiałbym to zrobić ręcznie...
Z góry dziękuje za przeczytanie o moim problemie, liczę, że ktoś mi w tym pomoże.
Pozdrawiam.

usunięcie znaczników <code class="delphi"> + poprawienie tagów wątku - fp

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

W tagach masz pascal w dziale Delphi i Pascal a kod w C/C++ ?

Kopiuj
   char t[]="abc";
   const unsigned size=3,digits=strlen(t);
   unsigned v[size];
   for(unsigned i=0;i<size;++i) v[i]=i;
   for(unsigned i=0;i<size;cout<<endl)
     {
      for(i=0;i<size;++i) cout<<t[v[i]];
      for(i=size-1;(i<size)&&(++v[i]>=digits);--i) v[i]=0;
     }
GS
  • Rejestracja: dni
  • Ostatnio: dni
1

użyj rekurencji

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12270
0

@koszar93 - wątek przenoszę, bo założyłeś go w złym dziale; Na przyszłość pamiętaj o zakładaniu wątków w poprawnych działach, a także ustalaniu poprawnych tagów i dobierania odpowiednich znaczników dla wklejanych kawałków kodów; Nie rób bałaganu bez potrzeby.

EM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 271
0

Możesz spróbować wykorzystać std::next_permutation, nie jest to do końca to co potrzebujesz ale być może się przyda.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.