Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
da un arraylist dovrei tirare fuori tutte le combinazioni possibili senza ripetizioni, le combinazioni devono essere di una lunghezza di 4 valori.
ipotizzando di avere una lista da 1 a 9
arraylist = 1, 2, 3, 4, 5, 6, 7, 8, 9
arraycomb[0] = 1, 2, 3, 4;
arraycomb[1] = 1, 2, 3, 5;
e cosi via..
come iterare sulla lista per estrarre i valori a 4 a 4 senza ripetizioni?
come dichiarare l'array delle combinazioni non sapendo di preciso quanti indici avra?
spero possiate aiutarmi a risolvere questa cosa, ringrazio anticipatamente.
niente da fare non riesco a rispondere, cmq al momento ho risolto facendo una cosa del genere:
Codice sorgente - presumibilmente C++
void addComb(int a, int b, int c, int d)
{
ar_comb.Add(a);
ar_comb.Add(b);
ar_comb.Add(c);
ar_comb.Add(d);
}
void getComb(object sender, EventArgs ev)
{
for(int a =1; a <= ar.Count; a++)
for(int b = a +1; b <= ar.Count; b++)
for(int c = b +1; c <= ar.Count; c++)
for(int d = c +1; d <= ar.Count; d++)
addComb(a, b, c, d);
}
però ci dovrebbe essere un modo di farlo senza troppi for, perchè se le combinazioni invece di 4 elementi devono essere più grandi? o peggio ancora se si lascia all'utente la scelta di quanti ne deve avere che si fa un mega overload di cicli for?
Ultima modifica effettuata da kaprone il 28/03/2011 alle 11:15
Non ti serve dichiarare un array per le combinazioni. Anzi, non ha senso: se stai già usando un ArrayList per le cifre, usane uno anche per le combinazioni.
Per evitare ripetizioni basta controllare se la sequenza estratta esiste già in arraycomb. Se esiste, ripeti l'estrazione, altrimenti vai avanti.
Considera di provare questa generalizzazione. Vale per ogni lista di numeri (non necessariamente in sequenza) e per ogni n. calculateCombinations restituisce però luna lista di array di indici e non di elementi.
fai un cross join e poi scarti tutte quelle combinazioni costituite dagli stessi numeri.
per array di 5 numeri, come in questo caso, l'eleganza del codice e la sua leggibilità sono preferiti all'efficienza... che poi se considerato l'overhead del clr ci mettiamo a ridere - HeDo - 28/03/11 19:59