一道游戏设计趣题
题目
前两天好基友乘坐飞机去外地开年会,估计公司怕他们坐飞机实在太无聊,给他们搞了几道思考题。
在此我分享一下这道题目,以及答题思路。请先看题目内容。我直接上图片了,真的懒得打字呀~~~。
接下来分享一下解题思路:
首先想到的是最直接的方法,找出各种分类,并累加各种分类模式的总数即可。
对于5种兵种,其形式可分为:
1 1 1 1 1 (阵容为一样一个) 对此形式总数为 1 ,从5个兵种中取出5个兵种, 组合数为C55.
5 (阵容为同一兵种) 对此形式总数为5 ,从5个兵种中取出1个兵种,组合数为C51.
2 2 1 (2个某兵种,2个某其他兵种,1个某其他兵种) 对此形式总数为 30,组合数为C51 * C41 * C31 / 2. (这里需要除以2 ,要去除221中22引起的重复)
2 3 (请脑补)对此形式总数为20,组合数为C51 * C41.
1 4 (请脑补) 对此形式总数为20,组合数为C51 * C41.
1 1 1 2 (请脑补)对此形式总数为20,组合数为C51 * C41 * C31 * C21 / 6.(这里需要除以6 ,要去除1112中111引起的重复)
1 3 1 (请脑补)对此形式总数为30,组合数为C51 * C41 * C31 /2. (这里需要除以2 ,要去除131中1 1引起的重复)
一共为 1 + 5 + 30 + 30 + 20 + 20 + 20 = 126.
扩展
理论上此题目已经解决,但是还没有抽取出可以扩展的规律。也就是说还有找到解决问题的通式。进一步思考,想到了高中时学习的插空法。嗯,可用此法优化解题思路。
5个兵种槽位之间有4个空,插空即使将槽位进行分类。分类方式为插零个空C40(不分),插一个空C41(分成两部分),两个空C42(分成三部分),三个空C43(分成四部分),四个空C44(分成五部分)。
以分成两部分为例:
C41 * C52 :C52的意思为从5个兵种中任取2个兵种。将两个兵种分配到C41个槽模式下,总数为40.
最终总数为:
C40*C51 + C41*C52 + C42*C53 + C43*C54 + C44*C55 = 5 + 40 + 60 + 20 + 1 = 126 (1)
再次扩展
将组合式(1)进行如下变换得到组合式(2)
C44*C51 + C43*C52 + C42*C53 + C41*C54 + C40*C55 (2)
组合式(2)可以缩写为 并可改写为C95,9 为(5 - 1) + 5 也就是槽数 -1 + 兵种数,5 为 兵种数。
所以类似问题均可用一个组合数来表示。妙哉!~ 扩展公式为 n为兵种槽数,m为兵种数
最后,我基友告诉我其实我推出了一个 公式。。。。
还有一个巧妙的思路,可以直接得出C94的答案,在这里我就不介绍了,方法总比问题多,仅在这里抛砖引玉,如果错误请大家批评指正。谢谢。