对于情况分析,主要参考:

本文只是对参考链接的简单“复制”,最多会有比较详细的解释,不会有什么新的东西该类问题涉及到三个因素,分别是球是否有区别、盒子是否有区别、盒子是否可以为空。所以大概可以将该问题分为以下八种情况:1.将n个无区别的球放入m个无标志的盒中,没有一个盒子为空,有多少种情况?

2.将n个无区别的球放入m个无标志的盒中,盒内数目不限制,有多少种情况?3.将n个无区别的球放入m个有标志的盒中,没有一个盒子为空,有多少种情况?

4.将n个无区别的球放入m个有标志的盒中,盒内数目无限制,有多少种情况?5.将n个有区别的球放入m个无标志的盒中,没有一个盒子为空,有多少种情况?

6.将n个有区别的球放入m个无标志的盒中,盒内数目不限制,有多少种情况?

将n个无区别的球放入m个无标志的盒中,没有一个盒子为空,有多少种情况?

解释

这里肯定要假设球的个数n要大于盒子的个数m,否则的话,必然有盒子是空的。

记录此时的情况个数为$P_{m}(n)$。由于此时任何一个盒子都不能是空的,所以必然有m个球放在了这m个盒子中,并且由于是无区别/无标志,所以这只有一种情况,也就是说$P_m(m)==1$。剩下的球怎么分等下再说,这个前提得有。

这里给出结论:

$P_m(n) = P_1(n-m) + P_2(n-m) + … + P_{n-m}(n-m)$

这里给出第一项的解释:在这m个盒子中任何1个盒子中要装上这n-m个球。

除了$P_m(m)==1$之外还有$P_{m-1}(m)==1$和$P_1(1)==1$,具体不在解释。

代码实现1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38* @param n N个球

* @return int 次数

*/

int (int m, int n)

{

if (m > n)

{

return -1;

}

if (m == 1 || m == n || m == n - 1)

{

return 1;

}

int count = 0;

for (int i = 1; i <= n - m; i++)

{

count += p(i, n - m);

}

return count;

}

int ()

{

int N, M;

std::cout << "input the number of boxes(M): ";

std::cin >> M;

std::cout << "input the number of balls(N): ";

std::cin >> N;

std::cout << "count is: " << p(M, N) << std::endl;

}

将n个无区别的球放入m个无标志的盒中,盒内数目不限制,有多少种情况?

解释

貌似不是特别好想,直接给出结论,$P_{m}(n+m)$

代码实现,略

将n个无区别的球放入m个有标志的盒中,没有一个盒子为空,有多少种情况?

$C_{n-1}^{m-1}$1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63// 主要是如何计算排列组合

/**

* @brief 计算

*

* @param m

* @param n

* @return int

*/

int n_arragement(int n, int start_n, int start_arragement)

{

// 不进行某些判断了

int result = start_n > 1 ? start_arragement : 1;

int start_i = start_n > 1 ? start_n + 1 : 1;

for (; start_i <= n; start_i++)

{

result *= start_i;

}

return result;

}

/**

* @brief 计算n个无区别的球放入m个有区别的盒子中有几种方法(不允许有空盒子)

*

* @param m M个盒子

* @param n N个球

* @return int 次数

*/

int p(int m, int n)

{

// 不进行某些判断了

/**

* $C_{n-1}^{m-1} = frac{(n-1)!}{(n-m)! * (m-1)!}$

*

*/

int part1, part2, part3 = 1; // (n-1)! larger smaller

if(n-m < m-1){

part3 = n_arragement(n-m, 1, 1);

part2 = n_arragement(m-1, n-m, part3);

part1 = n_arragement(n-1, m-1, part2);

} else {

part3 = n_arragement(m-1, 1, 1);

part2 = n_arragement(n-m, m-1, part3);

part1 = n_arragement(n-1, n-m, part2);

}

return part1 / (part2 * part3);

}

int main()

{

int N, M;

// std::cout << n_permutation(5, 3, 6) << std::endl;

std::cout << "input the number of boxes(M): ";

std::cin >> M;

std::cout << "input the number of balls(N): ";

std::cin >> N;

std::cout << "count is: " << p(M, N) << std::endl;

}

将n个无区别的球放入m个有标志的盒中,盒内数目无限制,有多少种情况?

$C_{m+n-1}^{m-1}$

将n个有区别的球放入m个无标志的盒中,没有一个盒子为空,有多少种情况?

略, $S(N, M)$ –第二类斯特林数

将n个有区别的球放入m个无标志的盒中,盒内数目不限制,有多少种情况?

略,$S(N, 1) + S(N, 2) + S(N, 3) + … + S(N, M)$

将n个有区别的球放入m个有标志的盒中,没有一个盒子为空,有多少种情况?

略,$M! * S(N, M)$

将n个有区别的球放入m个有标志的盒中,盒内数目不限制,有多少种情况?

$m^n$

n个小球放入m个盒子中_N个球放入M个盒子中的情况分析相关推荐

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

    科技教育创新 情形 1 :将 n 个相同的球放到 m 个不同的盒子中 问 : (1) 每个盒子至少有一球的不同放法 (n ≥ m); (2) 如果允许有空盒子的不同放法 ; (3) 求此种情形下 (1 ...

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

    M个球放入N个盒子的放法 1.N个盒子编号为1到N, 把M个相同的球放入这N个不相同的盒子,问共有多少种放法. M个球分成了N组,即装入N个盒子.如果要求每个盒子至少有一个球,则要求M>=N. ...

  3. n个小球放入m个盒子中_N个小球放进M个盒子算法

    N个小球放入M个盒子共有多少种方法,并输出的算法设计: 算法思路1 :暴力填充盒子 每个小球都可能放入M个盒子的任意一个,所以直接根据小球个数做递归即可,然后将存储放入hash中排重 //TODO 算 ...

  4. n个小球放入m个盒子中_联考数学复习指导:M个球放入N个盒子

    为了广大学员能够更好的备考2015年考研, 特收集了联考数学指导:M个球放入N个盒子,希望对各位考生有所帮助. M个球放入N个盒子的放法 N个盒子编号为1到N, 把M个相同的球放入这N个不相同的盒子, ...

  5. n个小球放入m个盒子中_【转】排列组合 n个球放入m个盒子m问题 总结

    球,盒子都可以分成是否不能区分,和能区分,还能分成是否能有空箱子,所以一共是8种情况,我们现在来一一讨论. 1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n 使用插板法:n个 ...

  6. 8个球放入3个盒子方式_球放进盒子问题(8种, 可变形)

    http://blog.sina.com.cn/s/blog_3f2c3d220100d57q.html 假设有m个小球,放入n个盒子里(),有几种放法? (1)盒子不同,球不同,允许有空. 由于每个 ...

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

    算法: HDU - 6397 Character Encoding 插板法+容斥原理  https://blog.csdn.net/xiang_6/article/details/81868989 [ ...

  8. 排列组合 n个球放入m个盒子算法 总结

    问题: 总结   https://blog.csdn.net/qwb492859377/article/details/50654627 N个球放M个盒子问题   https://blog.csdn. ...

  9. 排列组合 “n个球放入m个盒子“里,再来一遍

    1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n<m 使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙 ...

最新文章

  1. linux diff patch 生成和打补丁
  2. 诗与远方:无题(三十八)
  3. dovecot 不用mysql,dovecot+mysql 收件服务 和 空壳邮件
  4. 每天一道机器学习算法面试题目
  5. HTML/CSS面试题(收集)
  6. mysql英文版怎么调中文_navicat for mysql怎么设置中文
  7. 数据结构:八大数据结构分类
  8. 【06月25日】指数估值排名
  9. 2017新型智慧城市建设的五“新”级策略
  10. java 唐胡子_长沙.NET社区之光
  11. 小米airdots2蓝牙耳机连上手机后没有声音
  12. 如何查看服务器证书过期时间,如何看ssl证书过期
  13. Outlook 阿里邮箱 重复收取邮件 的情况 及解决方案
  14. 基于Go语言Echo+Vue+ElementUI的OA办公系统
  15. 让每个3D建模师都心动的:超详细人体结构构图分析
  16. iOS底层原理:weak的实现原理
  17. 内核——eCos内核概览
  18. 什么是启发式算法(heuristic algorithm)?
  19. c语言程序设计 李俊,深入浅出C语言程序设计(第2版)习题集和编程指导
  20. 全新轻量级ViT!LVT:具有增强自注意力的Lite视觉Transformer

热门文章

  1. 【转】360的“投名状”:400小分队直通周鸿祎 员工打了鸡血
  2. sql concat()函数
  3. 在深圳龙岗,看见空间智能化的潮水涌动
  4. oracle between和比较符,Oracle Between子句
  5. Windows Subsystem for Android 安装<简化向>
  6. 【腾讯Bugly干货分享】React Native项目实战总结
  7. error 1327. Invalid drive: d:\的解决办法
  8. r语言与多维统计_Kaukatcr:多维空间语言设计的实验
  9. matlab转子位置检测,一种基于反电势的永磁同步电机转子位置检测新方法
  10. PMSM中常用的两种坐标变换——Clarke变换