A titolo di curiosità, questo consente di calcolare tutte le combinazioni specificando arbitrariamente il set di caratteri (modificando l'array valori) e la lunghezza della stringa (modificando il #define NUMEROCIFRE).
codice:
#include <stdio.h>
#define ARRSIZE(arr) (sizeof(arr)/sizeof(*(arr)))
#define NUMEROCIFRE 5
int main()
{
const char valori[]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char buffer[NUMEROCIFRE+1]={0};
int stack[NUMEROCIFRE]={0};
int cifraCorrente=0;
for(; ; )
{
//Se siamo passati oltre
if(stack[cifraCorrente]==ARRSIZE(valori))
{
//Torna alla cifra precedente, eventualmente esce
if(--cifraCorrente==-1)
break;
//Ripete il controllo
continue;
}
buffer[cifraCorrente]=valori[stack[cifraCorrente]];
//Se siamo nel ciclo più interno stampa il risultato
if(cifraCorrente==NUMEROCIFRE-1)
puts(buffer);
stack[cifraCorrente]++;
//Passa alla cifra successiva, a meno che non siamo già all'ultima
if(cifraCorrente<NUMEROCIFRE-1)
{
cifraCorrente++;
stack[cifraCorrente]=0;
}
}
return 0;
}
Con le impostazioni in questione (alfabeto di 36 simboli, 5 lettere di lunghezza):
codice:
matteo@teoubuntu:~/cpp$ gcc -Wall -O3 combinazioni.c -o combinazioni.o
matteo@teoubuntu:~/cpp$ time ./combinazioni.o > combinazioni.txt
real 0m4.078s
user 0m2.424s
sys 0m1.380s
Di fatto quindi il calcolo effettivo impiega circa 2.42 secondi, gli 1.38 secondi di sys sono IO (e la differenza tra usr+sys e real è tempo dedicato ad altri processi). In sostanza, al netto dell'IO fa circa 25 milioni di combinazioni al secondo sul mio vecchio Athlon64 3800+.
Inizio e fine del file generato:
codice:
matteo@teoubuntu:~/cpp$ head combinazioni.txt
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
matteo@teoubuntu:~/cpp$ tail combinazioni.txt
zzzzq
zzzzr
zzzzs
zzzzt
zzzzu
zzzzv
zzzzw
zzzzx
zzzzy
zzzzz
Non credo che terrò combinazioni.txt per ricordo... 
codice:
matteo@teoubuntu:~/cpp$ ls -lh combinazioni.txt
-rw-r--r-- 1 matteo matteo 346M 2009-10-06 22:52 combinazioni.txt
matteo@teoubuntu:~/cpp$ rm combinazioni.txt
matteo@teoubuntu:~/cpp$