一,题目的意思:就是在堆栈中严格递增进入堆栈,问有多少种出栈顺序。
严格递增就是按照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);
}
}
}