仲恺acm 1095:火车出站【java】

题目描述

铁路进行列车调度时,常把站台设计成栈式结构的站台,试问:
设有编号为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));
        }
    }
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值