Prawdopodobnie nie jest to najlepsze podejście, ale powinno działać.
Określić liczbę kombinacji trzech liczb, które sumują się do 8:
1,1,6
1,2,5
1,3,4
2,2,4
2,3,3
aby znaleźć powyżej Zacząłem:
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
wiedząc, że mniej niż połowa 2 wszystkie kombinacje muszą być znaleźć ... ale ponieważ lista nie jest długa, równie dobrze możemy iść do końca.
Teraz sortuj każdą listę z 3 od największej do najmniejszej (lub odwrotnie). Teraz sortuj każdą listę 3 względem siebie. Skopiuj każdą unikatową listę do listy unikatowych list. Mamy teraz wszystkie kombinacje, które dodajemy do 8 (pięć list, jak myślę).
Rozważmy teraz listę w powyższym zestawie
6,1,1 wszystkich możliwych kombinacji można znaleźć przez:
8 pick 6, (ponieważ wybraliśmy sześć jest tylko 2 w lewo, aby wybrać z) 2 wybierz 1, 1 wybierz 1 , który działa na 28 * 2 * 1 = 56, warto wiedzieć, ile jest możliwości, abyś mógł przetestować.
wybrać n r (odbiór elementów r z N wszystkich możliwości)
nC = N, R!/[(n-r)! R!]
Więc teraz masz całkowitą liczbę iteracji dla każdego elementu listy dla pierwszej jest to 28 ...
Dobrze zbierając 6 pozycji z 8 jest taki sam, jak tworzenie listy 8 minus 2 elementy, ale które dwa elementy?
Dobrze, jeśli usuniemy 1,2, który pozostawi nam 3,4,5,6,7,8. Przyjrzyjmy się wszystkim grupom 2 ... Zaczynając od 1,2 następna będzie 1,3 ... więc następująca kolumna zostanie odczytana kolumna.
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
Podsumowując każdej z powyższych kolumnach daje nam 28. (tak to tylko pokryte pierwszą cyfrę na liście (6,1,1) Powtórzyć procedurę dla drugiej cyfry (o jeden), która jest „2 Wybierz 1 "Więc z lewej ponad dwie cyfry z powyższej listy wybieramy jedną z dwóch, a na koniec wybieramy ostatnią:
Wiem, że to nie jest szczegółowy algorytm, ale mam nadzieję, że będziesz w stanie na początek:
Czy r3 ma być {7, 3}? –
W podanym przykładzie wszystkie liczby są używane. Czy to jest wypadek, czy też zawsze tego chcesz? – aaronasterling
@Vincent @aaron Przyjęłam tak dla obu w mojej odpowiedzi. – marcog