2011-01-28 8 views
5

enter image description hereコンビナトリアル実装とパズル

このパズルがイメージ内に見つかりました。私の考えによれば、方法の総数は、

2*comb(7,i) for i <- 1 to 7となるはずです。combは、以下のように定義されています。私のアプローチは正しいのですか?私は、私が得た結果であって、以下に述べる関数ではないということに懸念している。

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 

短期間で多すぎる質問をしても構いません。私は熱狂的です。

+0

そのトリック質問です。ただ6人の子供がいる;) – sizzzzlerz

+0

@sizzzzlerz:ハハ、本当に... – unutbu

答えて

6

7があります!子供たちを整列させる方法(最初の場所は7つ、2つめは6つ、3つめは5つ)

各子供は内向きまたは外向きに向けることができます。それはそれぞれのポジションのための余分なビットのようなものです。 したがって2 ** 7を掛けます。 (すなわち、各スポットに2つの選択肢がある)。

各注文について、円を回転させると、「同じ」順序が得られます。 7つの回転はすべて同じ順序を作りますので、7で割ります。

答えは2 ** 7 * 7/7 = 128 * 6です! = 92160.

関連する問題