带类别约束的测验组合数计算问题咨询
问题分析与正确解法
首先咱们把问题拆解清楚:你需要从10个独立类别中每个类别选1道题组成10题测验,求能生成的不同测验总数。
为什么你之前的思路不适用?
- Stars and Bars(星条法):这个方法是用来解决「将相同物品分配到不同容器」的场景(比如把n个相同的球分到k个盒子),但你的问题是从每个类别里选不同的题目,完全不匹配,所以肯定无效。
- 排列公式
n!/(n−m)!:这个公式针对的是「从单一集合里选m个元素排列」的情况,而你的问题是从10个独立类别各选1个元素,属于分步选择,所以也不适用。
正确解法:乘法原理
这是典型的分步计数问题,用乘法原理就能轻松解决:
- 第一个类别有36道题,你有36种选择;
- 选完第一类的题后,第二个类别有21道题,对应21种选择;
- 以此类推,每个类别的选择数等于它的题目总量。
分两种情况计算:
- 不考虑测验内题目顺序:只要题目组成相同,不管排列顺序都算同一份测验,总数量就是所有类别题目数的乘积:
36 × 21 × 23 × 17 × 32 × 19 × 27 × 15 × 16 × 13 - 考虑测验内题目顺序:题目排列不同就算不同测验,需要再乘以10道题的全排列数
10!(即3628800),因为选出来的10道题可以有10!种排列方式。
Excel计算大数字的解决办法
Mac版Excel的FACT()函数确实只能算到170!,但咱们这里根本不需要超大阶乘:
- 用
PRODUCT()函数直接算乘积:输入=PRODUCT(36,21,23,17,32,19,27,15,16,13)就能得到不考虑顺序的结果(约1.51×10¹³); - 如果要算考虑顺序的结果,直接把上面的结果乘以
FACT(10)即可,10!=3628800,完全在Excel的计算范围内,不会溢出。
举个小例子验证:假设有2个类别,分别有2道和3道题,不考虑顺序的话总共有2×3=6种测验,考虑顺序就是6×2! =12种,完全符合逻辑。
内容的提问来源于stack exchange,提问作者Solar Mike
相关产品推荐
相关产品推荐

