一道游戏设计趣题

题目

前两天好基友乘坐飞机去外地开年会,估计公司怕他们坐飞机实在太无聊,给他们搞了几道思考题。

在此我分享一下这道题目,以及答题思路。请先看题目内容。我直接上图片了,真的懒得打字呀~~~。

接下来分享一下解题思路:

首先想到的是最直接的方法,找出各种分类,并累加各种分类模式的总数即可。

对于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的答案,在这里我就不介绍了,方法总比问题多,仅在这里抛砖引玉,如果错误请大家批评指正。谢谢。

 

posted on 2018-02-07 20:12  RonTang  阅读(1419)  评论(0编辑  收藏  举报