Jak mam tablicę taką np.:
lista_pom[0]=12
lista_pom[1]=31
lista_pom[2]=17
lista_pom[3]=43
i chcę aby dla k=1,...n-1 gdzie n w tym przypadku to 4 wpisał mi do tablicy kolejne kombinacje czyli:
dla k=1
tab[0]=12
tab[1]=31
tab[2]=17
tab[3]=43
dla k=2
tab[0]=1231
tab[1]=1217
tab[2]=1243
tab[3]=3117
tab[4]=3143
tab[5]=1743
dla k=3
tab[1]=123117
tab[2]=123143
tab[3]=121743
tab[4]=311743
Coś takiego kombinuję:
void komb(int n, int k, int lista_pom[], int tabSize, int tab[], int j)
{
//przy czym przed wywołaniem funkcji użytkownik musi zadbać aby j=0 i tab[] była wyzerowana
//poza tym dla powyższego przykładu tabSize=4
int i,o;
if(k!=0)
{
for(i=0;i<n-k+1;i++)
{
o=tabSize-n;
tab[j]=100*tab[j]+lista_pom[i+o];
komb(n-i-1,k-1,lista_pom,tabSize,tab,j)
}
}
else
j=j+1;
}
Program dla k=1 działa dobrze (jak się rozpisze na kartce to wydaje się być ok). Dla k=2 zaczyna się knocić w momencie jak zapamiętuje mi tab[0]=1231 i potem mamy j=1 i tab[1]=17 a powinno być 1217. Jednak nie wiem jak spamiętać to 12. Może ktoś by wiedział jak zmodyfikować powyższy kod? 7 dni mi już tylko zostało do końca przedłużonej sesji i jest lekki dramat.
I też druga sprawa to potem będzie mi potrzebne rozwalanie na cyfry tych dużych liczb tzn. np. z 123117 będę musiał zrobić:
lista1[0]=1
lista2[0]=2
lista1[1]=3
lista2[1]=1
lista1[2]=1
lista2[2]=7
Może jest inna droga generowania kombinacji łatwiejsza ale ja jestem beznadziejny i inaczej nie umiem i dlatego to tak wygląda. Też ciężko mi wytłumaczyć po co mi takie coś, bo to jest jakby część pewnego większego projektu związanego z kolorowaniem odpornym. Muszę mieć w tab[] te liczby i potem rozwalać je na cyfry bo potem mam dla każdej kombinacji 300 linijek kodu i ciężko by to było zmieścić w jednej funkcji wszystko zwłaszcza że jestem cienki w programowaniu i nie radzę sobie z trudnymi rzeczami.