您的位置:首页 > 编程语言 > Java开发

蓝桥杯-未名湖边的烦恼-递归-java

2017-04-16 19:10 393 查看
每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。

  每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)

输入格式 

两个整数,表示m和n

输出格式  

一个整数,表示队伍的排法的方案数。样例输入3 2样例输出5数据规模和约定  m,n∈[0,18]

        解题思路:

                每个人对于我们只有两种状态

                         1:还鞋  2:租鞋

               所以对于每种排列必须满足以下条件

                       1:还鞋的总人数为m

                       2:租鞋的总人数为n

                       3:在排列的任意一个位置

                            (1):如果此位置是还鞋的

                                          那么前面的还鞋总人数要大于等于租鞋的总人数

                            (2):如果此位置是租鞋的

                                          那么前面的还鞋总人数要大于租鞋的总人数

                     以下是代码:

                                          import java.util.Scanner;

public class Main {

    public static int sum ;

    public static int m;

    public static int n;
public static void main(String[] args) {
// TODO 自动生成的方法存根

        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {

         sum = 0;

               m = scanner.nextInt();

               n = scanner.nextInt();

              f(1,0,m+n-1);

              System.out.println(sum);
}
}
private static void f(int j, int k, int l) {
// TODO 自动生成的方法存根
if (l>=0) {
if (l==0&&j==m&&k==n) {
sum++;
}else {
if (j+1>=k) {
f(j+1, k, l-1);
}
if (j>=k+1) {
f(j, k+1, l-1);
}
}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 递归 蓝桥杯