zoukankan      html  css  js  c++  java
  • 未名湖畔的烦恼

    问题描述
      每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
      每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)
    输入格式
      两个整数,表示m和n
    输出格式
      一个整数,表示队伍的排法的方案数。
    样例输入
    3 2
    样例输出
    5
    数据规模和约定
      m,n∈[0,18]
      问题分析

    题解: 运用递归思想,遍历每一种可能是还鞋还是借鞋,遇到不符合条件的(剩余借鞋人数多余换线人数时)return返回,当借鞋的人数为0时便是一个符合要求的排序,数值加1。

    package test;
    import java.util.Scanner;
    public class NoNamelakeproblem {
    	   //还鞋
           int m;
           //租鞋
    	   int n;
    	   private static int Caculate(int m,int n){
    		   if(m<n)     //如果还鞋人数少于租鞋人数,函数返回
    			   return 0;
    		   if(n==0)    //如果租鞋人数为零,函数返回
    			   return 1;
    		   return Caculate(m,n-1)+Caculate(m-1,n);//要不能出现无鞋可借的局面,第一个人必须是还鞋的。n-1表示下一个人租鞋,m-1表示下一个人还鞋
    	   }
    	public static void main(String[] args) {
               System.out.println("请输入还鞋人数和租鞋人数:");
            	Scanner s1 = new Scanner(System.in);
            	Scanner s2 = new Scanner(System.in);
            	int m = s1.nextInt(); 
            	int n = s2.nextInt();
            	System.out.println("队伍排法的方案数:"+Caculate(m,n));
            }
    }
    
  • 相关阅读:
    398. Random Pick Index
    382. Linked List Random Node
    645. Set Mismatch
    174. Dungeon Game
    264. Ugly Number II
    115. Distinct Subsequences
    372. Super Pow
    LeetCode 242 有效的字母异位词
    LeetCode 78 子集
    LeetCode 404 左叶子之和
  • 原文地址:https://www.cnblogs.com/susususu/p/10727094.html
Copyright © 2011-2022 走看看