zoukankan      html  css  js  c++  java
  • 课程题目 : 1020. 放鸡蛋

    Description

     M个同样的鸡蛋放在N个同样的篮子里,允许有的篮子空着不放,问共有多少种不同的放法?(用K表示)511151 是同一种分法。

    Input

     第一行是测试数据的数目t0 <= t <= 20)。以下每行均包含二个整数MN,以空格分开。1<=MN<=10

    Output

    对输入的每组数据MN,用一行输出相应的K 

    Sample Input
    1
    7 3
    
    Sample Output
    8
    

    思路:(这里用m表示鸡蛋数量,用n表示篮子数量)

    题目用了递归的思想,当只剩下1个篮子或者只剩下1个鸡蛋时肯定只有1种情况。

    当m=n时,可以拆解为m个篮子都有鸡蛋(1种)加上少于m个篮子有鸡蛋的情况

    当m<n时,实际上用的上的篮子只有m个,可以等价为m=n的情况(去掉多余的篮子)

    当m>n时,拆解为2种情况,第一种是全部篮子都有鸡蛋(假设每个篮子都有1个),再把剩下的m-n个分到n个篮子中,

    第二种情况是没有把全部篮子用上

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int find_num_of_ways(int num_of_eggs,int num_of_baskets); //传进鸡蛋的数量与篮子的数量返回放置鸡蛋方法的种数
     5 
     6 int main(){
     7     int t;
     8     cin>>t;
     9     while(t--){
    10         int num_of_eggs,num_of_baskets;
    11         cin>>num_of_eggs>>num_of_baskets;
    12         cout<<find_num_of_ways(num_of_eggs,num_of_baskets)<<endl;
    13     }
    14     return 0;
    15 }
    16 int find_num_of_ways(int num_of_eggs,int num_of_baskets){
    17     if(num_of_baskets==1||num_of_eggs==1) //只有1个篮子或1个鸡蛋时只有1种放置方法
    18         return 1;
    19     if(num_of_baskets>=num_of_eggs) //篮子多余鸡蛋时等于每个篮子放一个鸡蛋的情况(1种)加上把鸡蛋放到比鸡蛋数量少1个篮子的情况数
    20         return 1+find_num_of_ways(num_of_eggs,num_of_eggs-1);
    21     else
    22         return find_num_of_ways(num_of_eggs-num_of_baskets,num_of_baskets)//每个篮子放一个鸡蛋后剩下num_of_eggs-num_of_baskets个鸡蛋放到num_of_baskets个篮子里
    23                 +find_num_of_ways(num_of_eggs,num_of_baskets-1);//不是全部篮子用上的情况
    24 }
  • 相关阅读:
    SpringMVC开发环境搭建
    SpringMVCRestful
    SpringMVC源码执行流程
    SpringMVC域对象数据输出
    SpringMVC请求参数
    Object类常用方法
    五大浏览器
    jinja2的学习之路
    嚣张过后之解决问题篇(无果)
    嚣张狂妄的经历之二(应聘infosys的teamleader)
  • 原文地址:https://www.cnblogs.com/jolin123/p/3353144.html
Copyright © 2011-2022 走看看