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

探讨了在特定条件下,租借与归还冰鞋的不同排队组合方式,以确保任何时候都有足够的冰鞋供顾客租用。通过递归算法计算所有合法的排队方案数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

  每天早上,租鞋窗口都会排起长龙,假设有还鞋的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);
}
}
}

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值