将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空

[概率]m个球扔到n个盒子 问题描述有m个球,要扔到n个盒子里。其中每个球都是互相独立地扔。问最后平均有几个盒子是有球的?问题解析这类问题是较为纯粹的数学问题,当然也可以用计算机精确地求出答案。方案一:编程解决 p(m, i):表示前 m 个球,扔到 n 个盒子里,共占用了 i 个盒子的概率 于是 p(m, i) = p(m-1, i) * (i/n) + p(m-1, i-1) * (n-i+1)/n p(m, i) = 阅读详情

将m个相同的球全部放到n个相同的盒子里面有几种放法,盒子不能为空,m>=n

盒子不能为空,所以可以当成将m-n个球放到n个盒子里,盒子可以为空。

比如将10个球放到5个盒子里,可以当成5个球放到5个盒子里,盒子能为空。接着,再分情况,将球分为

(5,0,0,0,0)

(4,1,0,0,0)或(2,3,0,0,0)

(3,1,1,0,0)或(2,2,1,0,0)

(2,1,1,1,0)

(1,1,1,1,1)

也就是1个盒子不能为空,2个盒子不能为空,3个盒子不能为空,到5个盒子都不能为空。

是不是跟一开始的时候很像,m个球放到n个盒子不能为空?这时候想到了什么?对,递归。

用一个函数fun(m,n)来获取m个球放到n个盒子里不能为空的情况(也可以用能为空的,这里用的是不能为空的)

上面的可以转换成

fun(5,1)+fun(5,2)+fun(5,3)+fun(5,1)+fun(5,0)    //其中n为0的情况即刚好每个盒子分到一个球,这个也要算进去

如果有非递归方法的,欢迎提出来探讨^_^,我自己的理解,不知道对错,有错请指出,谢谢!

//============================================================================
// Name        : test.cpp
// Author      : AstrayLinux
//============================================================================
#include <iostream>
using namespace std;

int fun(int m, int n) {
    if (m < n)   //m<n返回0
         return 0;
    if (n == 1 || (m - n) <= 1) //盒子为1时,球只有一个或0(0个即球刚好均分),时都只有一种分配方法
        return 1;

    int s = 0, count;   //s记录总数,count为递归次数

    if (m - n < n)       //去掉每个盒子分配的一个球后,球的数量少于盒子数,则只要递归球的个数次
        count = m - n;   //球数少的情况
    else
        count = n; //盒子数少的情况

    for (int i = 1; i <= count; i++) {
        s += fun(m - n, i); //递归
    }

    return s;
}

int main(int argc, char **argv) {

    cout << "\t";
    for (int i = 1; i <= 15; i++) {
        cout << i << "\t";
    }
    cout << endl;

    for (int i = 1; i <= 15; i++) {
        cout << i << "\t";
        for (int j = 1; j <= 15; j++) {
            cout << fun(i, j) << "    ";
        }
        cout << endl;
    }
}
//下面是结果 
//      1    2    3     4     5     6     7     8     9     10   11   12   13   14   15    
//1     1    0    0     0     0     0     0     0     0     0    0    0    0    0    0    
//2     1    1    0     0     0     0     0     0     0     0    0    0    0    0    0    
//3     1    1    1     0     0     0     0     0     0     0    0    0    0    0    0    
//4     1    2    1     1     0     0     0     0     0     0    0    0    0    0    0    
//5     1    2    2     1     1     0     0     0     0     0    0    0    0    0    0    
//6     1    3    3     2     1     1     0     0     0     0    0    0    0    0    0    
//7     1    3    4     3     2     1     1     0     0     0    0    0    0    0    0    
//8     1    4    5     5     3     2     1     1     0     0    0    0    0    0    0    
//9     1    4    7     6     5     3     2     1     1     0    0    0    0    0    0    
//10    1    5    8     9     7     5     3     2     1     1    0    0    0    0    0    
//11    1    5    10    11    10    7     5     3     2     1    1    0    0    0    0    
//12    1    6    12    15    13    11    7     5     3     2    1    1    0    0    0    
//13    1    6    14    18    18    14    11    7     5     3    2    1    1    0    0    
//14    1    7    16    23    23    20    15    11    7     5    3    2    1    1    0    
//15    1    7    19    27    30    26    21    15    11    7    5    3    2    1    1





        
2014年普及组初赛题解C++ 1。选择题 断电后会丢失数据的存储器是() ROM RAM 光盘 硬盘 解析 随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存或内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。 只读存储器(read only memory),英文简称ROM。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。计算机中的ROM主 阅读详情

相关推荐

排列组合 "n个球放入m个盒子m"问题 总结

求,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论。 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n 使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙即可 2.球同,盒不同,允许空箱 C(n+m-1,m-1) 我们在

qwb的博客 6万+

将n个相同的球,放进m个相同的箱子中,允许空箱,问有多少种不同的放法(球同,盒同,允许空箱)问题

/* 将n个相同的球,放进m个相同的箱子中,允许空箱,问有多少种不同的放法((球同,盒同,允许空箱)) 假设7个球,4个箱子有11种放法: 0,0,0,7 0,0,1,6 0,0,2,5 0,0,3,4 0,1,1,5 0,1,2,4 0,1,3,3 0,2,2,3 1,1,1,4 1,1,2,3 1,2,2,2 思路: dp[i][j]:将i个球放进j个箱子中,共有多少种不同的放法 dp初始化: dp[0][j] = 1; 将0个球放进j个箱子中,不管怎么放都有一种放法(允许空箱) dp[1][j]

qq_40181728的博客 3148

算法题(模板)——N个球放入M个盒子中

题目:n个球放入m个盒子中,有多少种放法 情况一:球同,盒不同,无空盒 也就是所有球都是一样的,但是盒子有区别,且不能出现空放的情况。 采用插板法,相当于在n-1个空隙中,插入m个盒子,而由于不能有空盒子,所以n个球的最前边或者最后边一定会放一个盒子,所以相当于n-1和间隙中放入m-1个盒子。 C(n-1,m-1), n>=m 0, n<m 情况二:球同,盒不同,允许有空盒 先假设m个盒子中都放好了1个球,即假设共有m+n个球,然后情况变为第一种情况,即n+m个球放入m个盒子中,没有空盒。 C(

chicken3wings的博客 1万+

2014 年普及组初赛整理

把MM个同样的球放到NN个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(用KK表示)。 例如,M=7M=7,N=3N=3时,K=8K=8;在这里认为(5,1,1)(5,1,1)和(1,5,1)(1,5,1)是同一种放置方法。 问:M=8M=8,N=5N=5时,K=K=__18__。 使用列举法解决,注意做到不重、不漏。建议按照有球袋子数分类列举,每种方案严格按照非降排列(省略空袋子): 11个有球的袋子:(8)(8) 22个有球的袋子:(1, 7)...

zhangfenghexhclj的博客 1055

“n个球放入m个盒子,使用程序输出所有的放法”的c++回溯法

前言: 问题描述: 有n个相同的球,m个盒子(编号为1,2,……m),将这n个球放入这m个盒子中,要求输出所有可能的放置方法,输出格式为二维数组(如下例子),每行对应每个可能性,每列对应每个盒子中的球数。 例如:3个球,5个盒子,可能的放法有: 30000 21000 11100 10101 ……等 原问题来源: 点击打开链接 写了个C++回溯法 #includ

unkonw__的博客 3709

算法真题02 - 将n个球装入m个盒子

第二题:将n个数装入m个盒子,允许盒子为空,没有顺序,有多少种情况。(bitedalu) 总方法数f(n,m)=f(n,m-1)+f(n-m,n) //分为有空盒子和没空盒子的总数 (其实我也没太懂,先这样写着,以后再改) 参考资料:m 个相同的球放入n 个相同的盒子里 #include <iostream> #include <vector> #include&lt...

GreatXiang888的博客 1574

【用脚趾头解决NOIP】(1):NOIP2010~NOIP2015普及组问题求解

(温馨提示:老司机即将开始飚灵车)NOIP2010问题求解第一题:迷之(LZW)编码题面描述: LZW编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。 举例说明,考虑一个待编码的信息串:“xyx yy yy xyx”。初始词典只有3个条目,第

xiaoyao24256的博客 4491

SNN系列|编码篇(2)时序编码

Tempotral Coding 选择编码方法是要根据编码对象以及模型如何处理编码信息进行选择,如下是一种时序信息的编码对比: Threshold-based encoding 又称为tempotral contrast,该方法可以用于编解码一段序列,当差值超过阈值时发放脉冲,阈值是根据编码的序列自适应变化的。 使用该编码方法时,实值序列最好是沿时间变化的,因为在根据差分决定是否发放脉冲后,脉冲的顺序与差分顺序有关。 Time-to-first spike coding 该编码方法将信息用神经元首次

Tianlong Lee的博客 1万+

“n个球放到m个盒子”问题整理

n个球放到m个盒子以8个球放到3个盒子为例1 球同,盒同,可空思路一:8个球放到3个盒子     取球最少盒子取0个球,取球第二少的盒子取[0,4]     取球最少盒子取1个球,取球第二少的盒子取[1,3]     取球最少盒子取2个球,取球第二少的盒子取[2,3]     一共5+3+2=10种     类似于 整数拆分 包含0  非递减序    8 = 0 + 0 + 8        + ...

u012720552的专栏 2万+

千兆以太网 PCB 设计实战:4层板 100Ω 差分对布线,EMI 降低 6dB 实测

本文详细解析了千兆以太网 PCB 设计中的关键技术与实战经验,重点介绍了4层板上100Ω差分对的优化布线方法,通过实测数据展示了EMI降低6dB的有效方案。内容涵盖层叠设计、阻抗计算、布线技巧及EMI抑制措施,为硬件工程师提供了一套完整的高速电路设计解决方案。

weixin_29175469的博客 428

手把手教你搞定CAC会议投稿:从LaTeX模板到PDF eXpress避坑全流程

本文详细解析CAC会议投稿全流程,重点介绍LaTeX模板调整、Turnitin查重技巧及PDF eXpress校验避坑指南。通过实战案例和代码示例,帮助研究者高效完成IEEE格式论文投稿,避免常见技术性失误,提升投稿成功率。

weixin_29969209的博客 397

[概率练习]n个小球放入m个盒子

球可以相同也可以不同,盒子可以一样也可以不一样,盒子可以空也可以不能空,那么一共就有2*2*2=8种 n个小球放入m个盒子 1.球同,盒不同,不能空 用插板法 一共有n-1个空隙(总共n+1个空隙,不能空要去掉头尾=n-1) ,要插m-1个板, 答案就是 上图就是7个小球3个盒子的一种情况 2.球同,盒不同,能空 如果给每个盒子一个球,就可以把问题转化为不能空的情况了,就...

思维缜密的博客 3万+

更多 LSTM 变种——应用于 CMAPSS 数据集

本文并模型介绍,只是把一些比较火的技术,像双向注意力机制,自注意力机制这样的比较火的内容,简单的和LSTM堆叠,结果发现效果都不如最基础的,这里作者将本人代码及实现结果,进行展示,给各位想更改LSTM的朋友一些。

2301_77491330的博客 1765

n个球放k个盒子问题归纳

问题描述:有n个球,放进k个盒子,有多少种不同的放法?(球必须全部放在盒子中,不能丢弃) 球可能相同,也可能不同,盒子亦然。另外,盒子可能限定可为空,也可能限定不可为空。这样就有8种可能: 情况 球是否相同 盒子是否相同 盒子能否为空 答案 计算时间复杂度 1 T T F d(n,k)=D(n−k,k)d(n,k)=D(n-k,k)d(n,k)=D(n−k,k) O((n−k)k)...

zhangwancongcsdn的博客 7004

Linux系统下Materials Studio 2020安装避坑指南:从依赖包到许可证配置全流程

本文提供了一份在Linux系统上安装Materials Studio 2020的深度避坑指南。详细解析了从系统依赖包检查、安装流程、许可证配置到Gateway服务部署的全过程,并分享了与Slurm作业调度系统集成的实战经验,旨在帮助用户高效、稳定地完成部署。

weixin_29313547的博客 387

优化NEXYS A7开发板(Xilinx Artix-7)Microblaze核的FLASH读写性能实战

本文针对NEXYS A7开发板(Xilinx Artix-7)上Microblaze核读写FLASH速度慢的问题,提供了系统性的优化实战指南。通过深入分析SPI控制器配置、Flash指令模式选择、Microblaze核的Cache与硬件加速器优化,以及程序运行位置(BRAM vs DDR)的调整,有效将FLASH读写性能从“龟速”提升至接近理论峰值。文章结合实测数据,为FPGA嵌入式开发者提供了清晰的性能瓶颈分析与解决方案。

carrot的博客 259

n个小球放入m个盒子中_n个球放入m个盒子的几种情形讨论

科技教育创新情形1:将n个相同的球放到m个不同的盒子中问:(1)每个盒子至少有一球的不同放法(n≥m);(2)如果允许有空盒子的不同放法;(3)求此种情形下(1)的概率。n个球放入m个盒子的几种情形讨论刘冬燕上海济光职业技术学院201901ThediscussionaboutputtingnballsintomboxesLiudongyanShanghaiJiguangPo...

weixin_39779530的博客 1136

EAAI title-page-template 怎么填写: 期刊投稿作者信息填写指南

本文详细介绍了期刊投稿时作者信息填写的规范要求。主要内容包括:1)核心填写原则(信息一致性、标注清晰性、通讯作者唯一性);2)具体填写方法演示(作者姓名、单位/机构、通讯作者);3)常见错误规避指南(如单位上标错误、邮箱无效等);4)提供可直接套用的规范模板。特别强调作者姓名拼写、单位标注、通讯作者指定等关键细节,并以深圳大学和同济大学研究团队为例进行说明,帮助投稿者避免因格式问题被退回修改。

ZhangJiqun&191cm&85kg 1095

n个小球放入m个盒子中_M个球放入N个盒子的放法

M个球放入N个盒子的放法1、N个盒子编号为1到N, 把M个相同的球放入这N个不相同的盒子,问共有多少种放法。M个球分成了N组,即装入N个盒子。如果要求每个盒子至少有一个球,则要求M>=N.M个球排成一排,中间有M-1个空隙, 任选N-1个空隙放挡板,即分成N组, 放法总数为:C(M-1,N-1) 。2、N=3时,特例1)将M个球放入3个不同的盒子共有X(M)=C(M-1,2)种方法;2)其中...

weixin_39987926的博客 2444

zemax 如何编译用户自定义DLL(含VS下载教程)

zemax 如何编译用户自定义DLL(含VS下载教程)

weixin_72050316的博客 492

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

排列组合—— 球盒问题

                                                                                                                  球盒问题 一、球相同,盒子相同,且盒子不能空      例1.8个相同的球放入3个相同的盒子中,每个盒子中至少有一个. 问有多少种不同的放法?  解析  球入盒问题,可以看...

black_horse2018的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

N个球放M个盒子问题

 研究了一天的《N个球放M个盒子问题》~~~~~~~~~~~~8种情况全部用公式解决 N球,M盒,由于球是否相同,盒是否相同,盒是否可以为空,共2^3=8种: 1、球同,盒同,盒不可以为空  Pm(N)--这符号表示部分数为m的N-分拆的个数,m是P的下标,为了好看我将大写的M弄成小写 2、球同,盒同,盒可以为空    Pm(N+M)--为什么要加M,与4为什么要在3的

纯弱渣! coding! 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

“n个球放到m个盒子”问题整理(Twelvefold way)

这个算法的正式名字是:“Twelvefold way”,共用12种情况。 本文转载自:自为风月马前卒的博文:浅谈"n个球"和"m个盒子"之间的关系 一、球异,盒同 不空 该情况为经典的第二类斯特灵数 设 \(f[n][m]\) 表示答案 \(f[n][m] = f[n - 1][m - 1] + m\times f[n - 1][m]\) 边界条件:\(f[0][0] =1\) 答案 = 第...

橘嘉禾 1389

m个球放进n个盒子中-暴力法和递归

1、盒子不同 暴力法 枚举所有位上0-m-1的数,每次对数列求和看总数满不满足等于m #include<iostream> using namespace std; const int maxn = 1000000; int m, n; int a[maxn]; int main() { cin >> m >> n;//m个球,n个盒 while (!a[n]) {//循环直到最高位出现1 //求和 int s = 0; for (int i = 0;

kiss_the_rian的博客 2613

[概率练习] n个小球放入m个盒子(8大类)

球可以相同也可以不同,盒子可以一样也可以不一样,盒子可以空也可以不能空,那么一共就有2x2x2=8种 n个小球放入m个盒子 1.球同,盒不同,不能空(隔板法) 一共有n-1个空隙(总共n+1个空隙,不能空要去掉头尾=n-1) ,要插m-1个板,答案为 (n-1) / (m-1) 上图就是7个小球3个盒子的一种情况 2.球同,盒不同,能空 如果给每个盒子一个球,就可以把问题转化为不能空的情况了,就相当于n+m个小球放入m个盒子且不能空,答案就是 (n+m-1) / (m-1) 3.球不同,盒同,不

米莱虾 1万+

m 个相同的球放入n 个相同的盒子里

//m 个相同的球放入n 个相同的盒子里,总方法数f(m,n)=f(m-n,n)+f(m,n-1)//分为有空盒子和没空盒子的总数 #include int f(int m,int n); int f(int m,int n) {     while(m>=0&&n>0)     {         if(n==1||m==0)         retur

u012555213的专栏 2817
上一篇: printf到printk的转变
下一篇: 两个指针(位置)的妙用
AstrayLinux
博客等级 码龄15年 55粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值