• 【递归】 放鸡蛋


    Sicily. 递归:放鸡蛋

    Description

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

    输入:鸡蛋M篮子N

    输出:鸡蛋的放法(降序,不重复)

    Sample input

    1

    7 3


    Sample output

    700

    610

    520

    511

    430

    421

    331

    322


    解题思路:

    (参考sicily 整数划分:m表示鸡蛋, n表示篮子数(最深输出栈),depth表示当前放鸡蛋的篮子位置(递归的深度),num数组储存依次放鸡蛋结果.初始化:cin >> m >> n; num为空; depth = 0.~(≧▽≦)/~啦啦啦,反正这里栈就是篮子,篮子就是栈)

    1. m == 0 时,表示没有鸡蛋可以放,此时输出存储结果,跳回上一个栈。

    ·若此时栈的深度等于篮子数,则正常输出;

    ·若此时栈的深度大于篮子数,不合题意不输出;

    ·若此时站的深度小于篮子数,多余的篮子放0个鸡蛋。

    1. m > 0 时,首先,第一个篮子可以放i个鸡蛋(其中降序要求im1

    ·当处在第0层栈时可直接放i个鸡蛋,num[depth] = i

    ·若当前药房的i个鸡蛋小于等于上一层栈的数,则

    这一层栈存放i个鸡蛋num[depth] = i;

    ·若当前i大于上一栈(篮子)则跳过不存(因为要满足降序,

    且避免重复)

    然后,剩下的m-i个鸡蛋继续向下调用栈继续存放直到鸡蛋放完。


    图解:

    num:

    i(1)



    ……depth=0……



    n-i(1)鸡蛋(i(1)--)→……

    i(1)

    i(2)


    ……depth=1……



    n-i(1)-i(2)i(2)--)→……

    i(1)

    i(2)

    i(3)

    ……depth=3……



    0个鸡蛋i(3)--)→……

    i(1)

    i(2)


    ……depth=m……



    符合格式就输出否则跳过,返回上一栈i(m)--



    参考代码:

    #include<iostream>
    using namespace std;

    //结束放鸡蛋,打印存放结果 void display(
    int* num,int n,int depth){//num表示篮子放鸡蛋的情况,n表示篮子的实际提供数,depth表示需要篮子的个数(栈的深度) int i; if(depth <= n){//需要的篮子数小于实际提供才打印 for(i=0;i < depth; i++) cout<<num[i]; for(; i<n; i++)//剩余篮子打印0 cout<<0; cout<<endl; } }
    void fun(int m,int depth,int n,
    int* num){//m表示要放的鸡蛋 if(m==0) { display(num,n,depth);//鸡蛋为0不能再放,所以打印 } else { for(int i=m;i>=1;i--){//第一个篮子从m到1个 if(depth==0||i<=num[depth-1]){//第一个篮子或者要放的比前一个篮子少的时候 num[depth]=i; //把鸡蛋放入篮子 fun(m-i,depth+1,n,num); //剩下的m-i个放到下一个篮子中 } } } }
    int main(){ int t,M,N,num[
    50]={0}; cin>>t; //t个测例 for(;t>0;t--){ cin>>M>>N; fun(M,0,N,num); } }

     (本博文或多或少参考过其他网上资料,但时间已久忘记当初的参考了,在此对他们表示感谢!)


    越努力越幸运~
  • 相关阅读:
    《ActionScript 3 CookBook 简体中文完整版》下载
    打开组件服务超慢,打不开属性窗口。
    无法引用Microsoft.Office.Interop.Excel的解决
    HttpWebResponse类
    反射性能优化 标记个
    配置文件入门 WebConfig.config常用配置节点介绍
    配置文件的读写
    HTTP权威指南阅读记录 第一章
    IIS
    锁机制与原子操作 <第四篇>
  • 原文地址:https://www.cnblogs.com/zengyh-1900/p/4051227.html
Copyright © 2020-2023  润新知