Kombinacje x-elementowych danego zbioru

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:

aaa
aab
aac
aba
...
cca
ccb
ccc

wpisuje np. 2:

aa
ab
ac
ba
bb
bc
ca
cb
cc

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

 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

0

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

   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;
     }
1

użyj rekurencji

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.

0

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

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