2011-01-28 15 views
5

enter image description hereImplementacja i układanie kombinatoryki

Znaleziono tę zagadkę wewnątrz obrazu. Według mojego rozumowania, całkowita liczba dróg powinna być

2*comb(7,i) for i <- 1 to 7 gdzie comb jest zdefiniowana następująco. Czy moje podejście jest prawidłowe? Obawiam się wyniku, który otrzymuję, a nie funkcji zapisanej poniżej.

def comb(N,k): 
    if (k > N) or (N < 0) or (k < 0): 
     return 0L 
    N,k = map(long,(N,k)) 
    top = N 
    val = 1L 
    while (top > (N-k)): 
     val *= top 
     top -= 1 
    n = 1L 
    while (n < k+1L): 
     val /= n 
     n += 1 
    return val 

Nie przeszkadza mi to, że zadaję zbyt wiele pytań w krótkim czasie. Jestem po prostu entuzjastyczny.

+0

To podchwytliwe pytanie. Jest tylko 6 dzieci;) – sizzzzlerz

+0

@sizzzzlerz: Haha, więc prawda ... – unutbu

Odpowiedz

6

Jest 7! sposoby na wyrównanie dzieci (7 opcji na pierwsze miejsce, 6 na sekundę, 5 na trzecie itd.)

Każde dziecko może być skierowane do wewnątrz lub na zewnątrz. To jak dodatkowy bit dla każdej pozycji. Pomnóż przez 2 ** 7. (to jest 2 możliwości dla każdego miejsca).

Teraz dla każdego zamówienia, po obróceniu koła, otrzymujesz "ten sam" porządek. Istnieje 7 obrotów, z których wszystkie produkują to samo zamówienie, więc podziel się przez 7.

Odpowiedź brzmi: 2 ** 7 * 7!/7 = 128 * 6! = 92160.

Powiązane problemy