実現したいこと
カタラン数を出力するプログラムを作りたい.
入力仕様はコマンドライン引数として与えられ, 0<=n<=19です.
出力仕様はCnのみ返します.
Cn = 1 ---(n=0, 1)
Cn = Σ_{i=0}^{n-1} (C[i] * C[n-i-1]) ---(n>=2)
作成したコード
C
1// カタラン数の計算 2#include <stdio.h> 3#include <stdlib.h> 4 5int cata[19] = { 1,1, }; 6int catalan(void) { 7 int n, i; 8 for(n = 2; n <= 19; ++n) { 9 for(i = 0; i <= n-1; ++i) { 10 cata[n] += cata[i] * cata[n-i-1]; 11 } 12 } 13} 14int main(int argc, char *argv[]) { 15 int p; 16 p = atoi(argv[1]); 17 printf("%d\n", cata[p]); 18 return 0; 19}
nが0から19までの全て場合を一度catalanで求めておき, そこからコマンドライン引数として与えられた数番目のカタラン数持ってきて打ち出す, ということをやろうとしました.
発生している問題
C
1$ gcc catalan.c 2$ ./a.out 0 31 4$ ./a.out 1 51 6$ ./a.out 2 70 8$ ./a.out 3 90
2以降が全て0になってしまいます. どこが誤っているのでしょうか. よろしくお願いします.
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。