n个结点可以组合成多少种二叉树,称为卡特兰数
#include<stdio.h>
//动态规划做法
/*
int main()
{
int n = 0;
scanf("%d",&n);//读取一共有多少个结点
int sta[n+1];//对应每种状态的数量
sta[0]=sta[1]=1;
for(int i = 2;i<=n;i++)
{
sta[i]=0;
}
for(int i = 2;i<=n;i++)
{
for(int j = 0;j<i;j++)
{
sta[i]=sta[i]+sta[j]*sta[i-j-1];
}
}
for(int i = 0;i<=n;i++)
{
printf("%d-->%d\n",i,sta[i]);
}
return 0;
}
*/
//已知公式做法
//阶乘函数
int factorial(int n)
{
if(n == 0)
{
return 1;
}
int back = 1;
for(int i = 1;i<=n;i++)
{
back = back*i;
}
return back;
}
//公式算法
int main()
{
int n = 0;
scanf("%d",&n);
int total = factorial(2*n)/(factorial(n)*factorial(n+1));
printf("%d",total);
return 0;
}