卡特兰数。把进栈看成是+1,出栈看成是-1,任何时候部分和都有a1+a2+....ak>=0。求这样的数列的个数。这明显是卡特兰数的一个解释嘛。在《组合数学》这本书就有这样的原本的证明。

import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class Main{
	public static void main(String args[]){
		Scanner in= new Scanner(System.in);
		BigDecimal []Can=new BigDecimal[110];
		BigDecimal B,C,D;
		Can[1]=new BigDecimal(1);
		for(int i=2;i<110;i++){
			B=new BigDecimal(4*i-2);
			C=new BigDecimal(i+1);
			D=Can[i-1].multiply(B);
			Can[i]=D.divide(C);
		}
		while(in.hasNext()){
			int n=in.nextInt();
			System.out.println(Can[n]);
		}
	}
}