题目描述
铁路进行列车调度时,常把站台设计成栈式结构的站台,试问:
设有编号为1到n的n辆列车,顺序开入栈式结构的站台,则可能的出栈序列有多少种?
输入格式
输入包含多组测试数据。每组为一个正整数n(1<=n<=20),表示有n辆列车。
输出
输出可能的出栈序列有多少种。
样例输入
4
3
样例输出
14
5
通过百度,得到公式(2*n)! / (n! * n! *(n + 1)) (其中n>=1)。计算n到2n的阶乘,还有n的阶乘。因为0到2n的阶乘除以n的阶乘=n到2n的阶乘。
问题是,若n=20,20到40的阶乘数目仍然很大,以至于用long都范围不够,必须使用double。然而double是浮点值,题目要求输出的是整数值。与1010平均绩点类似,用java.text.DecimalFormat包解决。
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("0");
System.out.println(df.format(sum));
package acm;
import java.util.Scanner;
import java.text.DecimalFormat;
public class 火车出站 {
public static void main(String[]args)
{
Scanner input = new Scanner(System.in);
DecimalFormat df = new DecimalFormat("0");
while(input.hasNextInt()){
int a = input.nextInt();
if(a >= 0 && a <=20 ){
double sum = 0;
double c = 1;
for(int b = a;b < 2*a;b ++){
c = c *(b + 1);//计算a到2a的阶乘
}
double e = 1;
for(int d = 0;d < a; d ++){
e = e *(d + 1);//计算a的阶乘
}
sum = c / ( e*(a + 1));
System.out.println(df.format(sum));
}
}
}
}