n個節點的二叉樹的種樹成卡特蘭數的分佈
阿新 • • 發佈:2019-01-30
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <vector> #include <cmath> #include <ctime> #include <list> #include <set> #include <map> #include <stack> #include <queue> using namespace std; int a[105][1000]; void katelan() { memset(a,0,sizeof(a)); a[1][1]=1; a[1][0]=1; a[2][1]=2; a[2][0]=1; int len=1,yu; for(int i=3;i<=100;i++) { yu=0; for(int j=1;j<=len;j++) { int t=a[i-1][j]*(4*i-2)+yu; a[i][j]=t%10; yu=t/10; } while(yu) { a[i][++len]=yu%10; yu/=10; } for(int j=len;j>0;j--) { int p=a[i][j]+yu*10; a[i][j]=p/(i+1); yu=p%(i+1); } while(!a[i][len]) { len--; } a[i][0]=len; } } void init() { katelan(); for(int i=1;i<=20;i++) { for(int j=a[i][0];j>=1;j--) printf("%d",a[i][j]); printf("\n"); } } int main() { init(); return 0; }