UVa 10007 - Count the Trees(卡特兰数+阶乘+大数)

题目链接:UVa 10007

题意:统计n个节点的二叉树的个数

1个节点形成的二叉树的形状个数为:1

2个节点形成的二叉树的形状个数为:2

3个节点形成的二叉树的形状个数为:5

4个节点形成的二叉树的形状个数为:14

5个节点形成的二叉树的形状个数为:42

把n个节点对号入座有n!种情况

所以有n个节点的形成的二叉树的总数是:卡特兰数F[n]*n!

程序:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main {
 4     public static void main(String args[]){
 5         Scanner cin=new Scanner(System.in);
 6         BigInteger h[]=new BigInteger[302];
 7         BigInteger a[]=new BigInteger[302];
 8         BigInteger fact=BigInteger.valueOf(1);
 9         int n;
10         h[1]=BigInteger.valueOf(1);
11         a[1]=BigInteger.valueOf(1);
12         for(int i=2;i<=300;i++){
13             fact=fact.multiply(BigInteger.valueOf(i));
14             BigInteger k=BigInteger.valueOf(i*4-2);
15             h[i]=h[i-1].multiply(k);
16             h[i]=h[i].divide(BigInteger.valueOf(i+1));
17             a[i]=h[i].multiply(fact);
18             //System.out.println(" "+h[i]+" "+fact+" "+a[i]);
19         }
20         while(true){
21             n=cin.nextInt();
22             if(n==0)
23                 break;
24             System.out.println(a[n]);
25         }
26     }
27 }

 

转载于:https://www.cnblogs.com/mypsq/p/4715447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值