salve,
sto tentando di generare liste di lettere concatenate senza ripetizioni, del tipo:
a
b
c
...
x
y
z
aa
ab
ac
ad
ae
...
zz
Qualcuno di voi ha un suggerimento? grazie
salve,
sto tentando di generare liste di lettere concatenate senza ripetizioni, del tipo:
a
b
c
...
x
y
z
aa
ab
ac
ad
ae
...
zz
Qualcuno di voi ha un suggerimento? grazie
con che criterio?
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
Pensavo a qualcosa del tipo: avendo una serie di simboli (a,b,...z), ottenere tutte le combinazioni non ripetute, per esempio di due simboli (aa, ab, ac, ad, etc) o di tre (aaa, aab, aac, etc). L'ordine non é importante, potrebbe anche essere: gf, ac, zu, etc.
Solo che non so dove partire: mi chiedevo se esiste una qualche funzione o metodo che potrebbe essere usato a questo scopo.
Ma in che linguaggio?
Il seguente programma C ti stampa tutte le combinazioni lunghe N lettere scelte nell'intervallo a...MAXCHAR:
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 3 #define MAXCHAR 'g' void genera(char word[], int len, int current){ if(len == 0){ word[current] = '\0'; printf("\n%s", word); return; } for(char c = 'a'; c <= MAXCHAR; c++){ word[current] = c; genera(word, len - 1, current + 1); } } int main(){ int len = N; char *word = (char *)malloc(len + 1 * sizeof(char)); genera(word, len, 0); free(word); }
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals
anx,
non capisco il c, sto tentando si imparare il linguaggio vb.net. Non potresti spiegarmi a parole il programma che hai scritto? Grazie
Se fosse nota la lunghezza delle combinazioni (N) ti basterenne fare N cili (for o while, dipende da come si fanno in VB che non conosco) annidati; lo i-esimo ciclo si occupa di far variare la i-esima posizione della combinazione si tutte le lettere a disposizione.
Se N non è noto a priori puoi sfruttare il meccanismo della ricorsione: la funzione richiama se stessa per simulare i cicli annidati; ogni singola chimata riceve come input la posizione i-esima di cui si deve occupare, e la fa variare nell'insieme di tutte le lettere, e per ognuna di esse invoca ricorsivamente se stessa aumentando i di uno in modo che la chimata ricorsiva si occupi della posizione successiva.
inizialmente devi invocare la funzione con i = 1, ad esempiocodice://parola è un array di N charatteri parola = carattere[N] genera(intero N, intero i){ se i supera N stampa parola ed esci; altrimenti per ogni carattere c:{ poni parola[i] = c; invoca genera(N, i + 1); } }
genera(5, 0);
se N = 5
Sun Certified Java Programmer
EUCIP Core Level Certified
European Certification of Informatics Professionals