How Many Trees?
1 import java.util.*; 2 import java.math.*; 3 public class Main 4 { 5 public static void main(String []args) 6 { 7 Scanner cin=new Scanner(System.in); 8 int i,n; 9 while(cin.hasNext()) 10 { 11 n=cin.nextInt(); 12 BigInteger s1 = BigInteger.valueOf(1); 13 BigInteger s2 = BigInteger.valueOf(1); 14 for(i=1;i<=n;i++) 15 { 16 s1=s1.multiply(BigInteger.valueOf(2*n-i+1)); 17 s2=s2.multiply(BigInteger.valueOf(i)); 18 } 19 s1=s1.divide(BigInteger.valueOf(n+1)); 20 System.out.println(s1.divide(s2)); 21 } 22 } 23 }
这个题目意思是指给出一个数n,输出n 个数构成的不同形状的二叉树,表示使用公式,利用卡特兰数的推导公式,
则有:S1=C(2*n,n)/(n+1).
表示数据过于庞大,所以选择了用Java的大数类来计算~~