Un semplice algoritmo sviluppato in C
Qualche anno fa mi sono trovato nella necessità di creare un algoritmo per ricavare le possibili combinazioni di n elementi su k posizioni: questo mi serviva per sviluppare un sistema per il totogol su Excel (quindi n numeri di mia scelta su 8 posizioni).
Ho affrontato il problema sviluppando la seguente funzione ricorsiva in
C:
void combina(char* data, int n, int k, char* out_str, int out_pos)
{
int i;
for (i=0; i<=(n-k); i++)
{
out_str[out_pos]=data[i];
if(k > 1)
{
combina(&data[i+1], (n-1-i), (k-1), out_str, (out_pos+1));
}
else
{
out_str[out_pos+1]=0;
printf(out_str);
putchar('\\n');
}
}
}
Tale funzione si limita a stampare a video il risultato delle possibili
combinazioni di un array di n caratteri di classe k.
Segue un esempio di
chiamata:
int main(int argc, char *argv[])
{
char car[] = {'A', 'B', 'C', 'D', 'E'};
char comodo[6];
combina(car, 5, 3, comodo, 0);
printf ("\\nPremi un tasto\\n");
getch();
return 0;
}
Il risultato a video è il seguente:
ABC
ABD
ABE
ACD
ACE
ADE
BCD
BCE
BDE
CDE
Copyright © by Sebastien Costa All Right Reserved.