这个笔试题来自今年的知名游戏公司,因为签了保密协定,为了避免麻烦,自行改编一下。
在一款游戏中,武器等级可以分为0-7级,武器每次升级需要一块宝石,每次升级可能出现三种情况:升一级、保持不变、降一级。
已知i->i+1升一级概率为Ai,保持不变概率为Bi,降一级概率为Ci。
A0~A7,B0~B7,C0~C7均已知,其中从等级0到等级1必定成功,即A0=1,B0=0,C0=0
现在问你将武器从0级升级到3级需要的宝石数的期望?
如果大家在看这篇博文之前,没有阅读我之前的博文:面试题中的概率问题-数学期望(1),请大家先去看看,主要关注【数学期望中的递归特性】
设f(x,y)表示从x升级到y的宝石数期望,则:
f(0,3) = 1 + f(1,3)
f(1,3) = A1*(1+f(2,3)) + B1*(1+f(1,3)) + C1*(1+f(0,3))
f(2,3) = A2*1 + B2*(1+f(2,3)) + C2*(1+f(1,3))
很明显,这是一个三元一次方程组,必定可以计算出f(0,3),f(1,3),f(2,3)
其中f(0,3)为最终的答案
其实,这个思想并不难,关键是有没有想到,下面做简单分析
如果我们令[A0,B0,C0] = [1,0,0] ,[A1,B1,C1] = [1/3,1/3,1/3],[A2,B2,C2] = [1/9,4/9,4/9] ,那么f(0,3) = 30 f(1,3) = 29 f(2,3) = 25
注意,根据我们上面简单分析中的第二条f(x,y)的计算,其实可以解决升级到任意等级的需要的宝石数,包括将最高等级扩展到N,只要有对应的[Ai,Bi,Ci],因为实际上最后问题都是一个方程组,可以编程来解决,参考矩阵的相关知识,见数值计算。