Example #1
0
int catalan(int n) {
  int i;
  if(memo[n] != 0) return memo[n];
  if(n == 0 || n == 1) return 1;
  for (i = 0; i < n; i++) {
    memo[n] += catalan(i)*catalan(n-i-1);
  }
  return memo[n];
}
Example #2
0
int main() 
{
    int n;
    printf("input n:");
    scanf("%d", &n);
    printf("catalan(%d) is %d\n", n, catalan(n));   
    return 0;
}
Example #3
0
int main()
{
	int n, t = 1;
	catalan();
	while (scanf("%d", &n) && n != -1) {
		printf("%d %d %lld\n", t++, n, 2 * cata[n + 1]);
	}
	return 0;
}
int main()
{
    catalan();
    while(~scanf("%d",&n)){
        for(k=a[n][0];k;k--)printf("%d",a[n][k]);
        puts("");
    }
    return 0;
}
Example #5
0
int main(){
    int i,n;
    memset(op1,0, PREC);
    memset(op2,0, PREC);
    while(scanf("%d",&n) != EOF){
        catalan(n);
        rev(res);
        printf("%s\n",res);
    }
    return 0;
}
Example #6
0
int main(void){
  int n;
  int i;
  scanf("%d",&n);
  memo = (int *)malloc(n * sizeof(n));
  for (i = 0; i < n; i++) {
    memo[i] = 0;
  }
  printf("%d",catalan(n));
  return 0;
}
Example #7
0
void catalan(int n){
    if(n<=1){
        memcpy(res,"1",2);
        return;
    }
    catalan(n-1);
    int m = n-1;
    int aux = 2*(2*m+1);
    set_op1(aux);
    memcpy(op2,res,PREC);
    mult();
    memcpy(op1,res,PREC);
    divide_by(m+2);
}
 int numTrees(int n) {
     if(n==0) return 1;
     if(n==1) return 1;
     if(n==2) return 2;
     vector<int> catalan(n+1);
     catalan[0] = 1;
     catalan[1] = 1;
     catalan[2] = 2;
     for(int i=3;i<=n;i++) {
         catalan[i] = 0;
         for(int j=0;j<=i-1;j++) {
             catalan[i] += catalan[j]*catalan[i-1-j];
         }
     }
     return catalan[n];
 }
int main() {
    for (int i = 0; i < 30; i++) std::cout << catalan(i) << '\n';
}