Probabilmente non è l'approccio migliore ma dovrebbe funzionare.
determinare il numero di combinazioni di tre numeri che somma a 8:
1,1,6
1,2,5
1,3,4
2,2,4
2,3,3
Per trovare quanto sopra ho iniziato con:
6,1,1 then subtracted 1 from six and added it to the next column...
5,2,1 then subtracted 1 from second column and added to next column...
5,1,2 then started again at first column...
4,2,2 carry again from second to third
4,1,3 again from first...
3,2,3 second -> third
3,1,4
sapendo che meno della metà è 2 tutte le combinazioni devono essere stati trovato ... ma dato che la lista non è lunga, potremmo anche andare fino in fondo.
Ora ordina ogni elenco di 3 dal più grande al meno (o viceversa) Ora ordina ogni elenco di 3 l'uno relativo all'altro. Copia ogni elenco univoco in un elenco di elenchi univoci. Ora abbiamo tutte le combinazioni che aggiungono a 8 (cinque liste penso).
Ora consideriamo un elenco nel set sopra
6,1,1 tutte le possibili combinazioni sono trovati da:
8 accompagnamento 6, (poiché abbiamo scelto sei c'è solo 2 rimasti cui scegliere) 2 scegli 1, 1 scegli 1 che funziona a 28 * 2 * 1 = 56, vale la pena conoscere quante possibilità ci sono in modo da poter testare.
n scegliere r (scegliere gli elementi R da opzioni n totale)
n C r = n!/[(n-r)! r!]
Così ora avete il numero totale di iterazioni per ogni componente della lista per il primo è il 28 ...
Bene raccogliendo 6 elementi da 8 è lo stesso di creare una lista di 8 meno 2 elementi, ma quali due elementi?
Bene se rimuoviamo 1,2 che ci lascia con 3,4,5,6,7,8. Consideriamo tutti i gruppi di 2 ... A partire da 1,2 il successivo sarebbe 1,3 ... quindi il seguente è letto colonna per colonna.
12
13 23
14 24 34
15 25 35 45
16 26 36 46 56
17 27 37 47 57 67
18 28 38 48 58 68 78
Riassumendo ciascuna delle colonne sopra ci dà 28. (quindi questo coperti solo la prima cifra della lista (6,1,1) ripetere la procedura per la seconda cifra (uno) che è "2 Scegli 1 "Così di sinistra su due cifre dalla lista sopra ne scegliamo una delle due e poi per l'ultima ne prendiamo la rimanente
So che questo non è un algoritmo dettagliato ma spero che sarai in grado per iniziare
dovrebbe essere r3 essere {7, 3}? –
Nell'esempio che si assegna, vengono utilizzati tutti i numeri. È un incidente o vuoi sempre che sia così? – aaronasterling
@Vincent @aaron Ho assunto sì per entrambi nella mia risposta. – marcog