杭电 1023 Train Problem II

4 篇文章 0 订阅
3 篇文章 0 订阅

一,题目的意思:就是在堆栈中严格递增进入堆栈,问有多少种出栈顺序。
严格递增就是按照12345进入堆栈,而不是按照21345的顺序进入堆栈中。

二,解题思路:采用卡特兰数方法来解决这题,另外要使用BigInteger来进行操作,而不能使用int数据类型来进行操作
1,这题,要是能想到卡特兰数方法的话,不难的。
2,卡特兰数的公式为:
F(0)=1
F(1)=1
F(2)=2
F(3)=5
F(4)=14
F(5)=42
F(6)=132
F(7)=429
F(8)=1430
F(9)=4820
F(10)=16796
F(11)=58786
F(12)=208012
F(13)=742900
F(14)=2674440
F(15)=9694845
F(16)=35357670
F(17)=129644790

三,用java实现此程序 (已经AC了的)

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
    public static void main(String []args)
    {
        Scanner scan=new Scanner(System.in);
        int n;
        BigInteger sum;
        while(scan.hasNext())
        {
            n=scan.nextInt();
            BigInteger sum1;
            sum1=BigInteger.valueOf(1); //对sum1进行初始化 
            BigInteger sum2;
            sum2=BigInteger.valueOf(1);//对sum2进行初始化
            for(int i=n;i>0;i--)
            {
            sum1=sum1.multiply(BigInteger.valueOf(i));
            }
            for(int i=2*n;i>n;i--)
            {
            sum2=sum2.multiply(BigInteger.valueOf(i));
            }
            sum=sum2.divide(sum1);
            BigInteger bit3=new BigInteger(String.valueOf(n+1));
            sum=sum.divide(bit3);
            System.out.println(sum);
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值