某公司面试的一道智力题

某公司面试的一道智力题,题目如下

有一款游戏,升级是用宝石砸的,在1-7级,你的命中率百分,砸一次宝石升一级,在7级以后,你的命中率是50%,砸中升一级,砸错降一级,问到11级需要多少个宝石?(答案安概率计算 )

起初,我的想法是让通过rand来实现。思路如下

首先判断当前的等级,如果小于7级,直接升一级,宝石数量加1,当当前等级>=7时,那么,用srand(time(0))随即一个数字,并对2取余,为1就升级,为0就降级。并相应的对宝石数量加1,并进行递归,知道级数为11时,退出。

我通过代码实现了此方法,执行完后看了结果感觉不对,但又说不上哪里不对,这很纠结,于是,我准备直接放弃这种方法,寻找另外的出路。结果昨天晚上想了一晚上,没有想出来,叫了好多朋友一起研究,还是没有结果。今天,我在公司微博上发了个帖子,公司的人很热情,回答的人很多。虽然很多人都没有能帮到我解这个题但我还是非常感谢他们。其中,有一位大神给我了一个连接,也是某某公司的面试题,和这题是一模一样,讲的是宝剑升级。我看了很多人回帖,仔细看了下,有的方法明显不靠谱,有的方法我明显看不懂,我也不知道靠不靠谱。在最后,我看到公司微博有人回复我,试试用马尔科夫链来解决。我当时只听说过马尔科夫链。以前根本没有仔细看过。于是,我抱着试试的态度。在网上查了很多马尔科夫链,只是,由于大学毕业后就没怎么看过数学,什么差分方程,齐次方程,等等各种数学知识,全都忘光了。递归查。知道搞明白为止。最终找到了一个公式是解决我这个问题的。n步转移矩阵。

最后有个公式,

 

P1代表的是一步转移矩阵。即执行一次转移后的概率分布。Pn代表的是执行N次转移后的概率分布。这样,也就变为了矩阵相乘。这推导工程比较复杂,网上资料很多,这里就不详解了。(因为我也是个数学菜鸟,只懂皮毛)

那么,如果我们要算从第一级到第11级的概率和宝石之间的关系,我们就转换成关注经过N部转移后的矩阵的第一排的最后一项。

这篇文章写了好久,一直没有发布,代码稍后发布,比较简单,重要的是死路。数学的算法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值