2016-10-31 8 views
0

私は、左から右に数を数えるパスカルの三角形の値を保持する1次元配列を持っています。パスカル三角から値を取得する

int pascal[10] = { 1, 1, 1, 1, 2, 1, 1, 3, 3, 1 }; 

これを使用して2つの数字の組み合わせをすばやく見つける方法を教えてください。

3を見つけるには1を選んで、答えを見つけるために配列を調べます。3私は見たいインデックスを正しく計算するにはどうしたらいいですか?

もし私がパスカルの三角形を構築し続けたいのであれば、ツリー再帰を行わずにこの配列を使って構築するにはどうすればいいですか?漸化

+0

アレイを使用する必要がありますか?確かに 'C(n、k)=(n!)/((k)(n-k)!)'を使う方が速いでしょうか? – rbm

答えて

1

ような何かあなたは、配列を使用してではなく、式を経て、それを計算することを主張した場合、あなたは以下を使用することができます(C#の例):

int Choose_N_over_K(int N, int K) 
{ 
    int[] pascal = new[] { 1, 1, 1, 1, 2, 1,1, 3, 3, 1, 1,4,6,4,1};  
    var index = (N * (N + 1)/2 + K ); 
    return (pascal[index]); 
} 


void Main() 
{ 
     Console.WriteLine(Choose_N_over_K(4,2)); 
} 

(2以上の4例について)を与えます:

6 

我々は単に私たちが数字1..Nを合計する方法を知っている三角形のすべての行が前の行より1つの要素を持っているという事実に基づいて、配列内のインデックスを計算し、

// 0: 1 start index 0 
// 1: 1 1 start index 1 
// 2: 1 2 1 start index 3 
// 3: 1 3 3 1 start index 6 
// 4: 1 4 6 4 1 start index 10 
+0

は下のダイアグラムを見せてくれて本当にわかりやすくなりました。本当にありがとう! – Dillydill123

関連する問題