Cerco di spiegarmi meglio.
Dimentica per il momento quello che era il tuo intento iniziale (poi verrà da sé), e ipotizziamo di voler risolvere il seguente esercizio:
stampare a schermo tutte le combinazioni semplici delle prime $5$ lettere dell'alfabeto prese $3$ alla volta.
Sarà ovviamente $n=5$ e $k=3$. Dichiariamo un array $v$ contenente il nostro set di elementi:
- Codice:
char v[n] = {a, b, c, d, e};
Riprendiamo ora le e combinazioni semplici in base $3$ dell'insieme ${0, 1, 2, 3, 4}$ che ti ho chiesto in precedenza e ipotizziamo di salvarle in $10$ array di $k=3$ elementi ciascuno:
- Codice:
unsigned int u_1[k] = {0,1,2};
unsigned int u_2[k] = {0,1,3};
unsigned int u_3[k] = {0,1,4};
unsigned int u_4[k] = {0,2,3};
unsigned int u_5[k] = {0,2,4};
unsigned int u_6[k] = {0,3,4};
unsigned int u_7[k] = {1,2,3};
unsigned int u_8[k] = {1,2,4};
unsigned int u_9[k] = {1,3,4};
unsigned int u_10[k] = {2,3,4};
Come conseguenza avremo che:
- Codice:
{v[u_1[0]], v[u_1[1]], v[u_1[2]]} ≡ {v[0], v[1], v[2]} ≡ {a, b, c}
{v[u_2[0]], v[u_2[1]], v[u_2[2]]} ≡ {v[0], v[1], v[3]} ≡ {a, b, d}
{v[u_3[0]], v[u_3[1]], v[u_3[2]]} ≡ {v[0], v[1], v[4]} ≡ {a, b, e}
...
{v[u_8[0]], v[u_8[1]], v[u_8[2]]} ≡ {v[1], v[2], v[4]} ≡ {b, c, e}
{v[u_9[0]], v[u_9[1]], v[u_9[2]]} ≡ {v[1], v[3], v[4]} ≡ {b, d, e}
{v[u_10[0]], v[u_10[1]], v[u_10[2]]} ≡ {v[2], v[3], v[4]} ≡ {c, d, e}
Dove l'ultima colonna restituisce appunto quello che stavamo cercando, ossia le combinazioni semplici delle prime $5$ lettere dell'alfabeto prese $3$ alla volta. La prima colonna dovrebbe invece chiarirti il significato di quel $v[u[i]]$ di un mio precedente post.
A questo punto risulta evidente che il tutto si riduce ad escogitare un modo per ottenere in modo automatico gli array $u_1,u_2,...,u_9,u_10$.
Ed è qui che entra in gioco la funzione:
- Codice:
bool next_combination(unsigned int n, unsigned int k, unsigned int u[k]);
Essa:
- per $u={0,1,2}$ restituirà
true e modificherà il suddetto array in $u={0,1,3}$;
- per $u={0,1,3}$ restituirà
true e modificherà il suddetto array in $u={0,1,4}$;
...
- per $u={1,3,4}$ restituirà
true e modificherà il suddetto array in $u={2,3,4}$;
- per $u={2,3,4}$ restituirà
false.
Quindi per risolvere l'esercizio che ho proposto all'inizio di questo messaggio, non resta altro che implementare la funzione next_combination() utilizzando i suggerimenti che ti ho dato nel precedente post. Inizia a buttare giù qualche riga di codice, poi nel caso possiamo ragionarci insieme.