明日方舟抽卡概率计算
狂欢の圣诞
编辑于 2020年08月13日 17:05

这是一个比较硬核的计算过程的演示,如果没有兴趣那么直接翻到后面查看结论吧2333

那么直接进入正题(`・ω・´)


数学模型

1~50次事件发生的概率为p,从51次开始事件发生的概率每次增加p;

p=0.02;

计算过程

该事件在1~99内每次发生的概率为:

01:p

02:(1-p)*p

03:(1-p)^2*p

...

x(1<=x<=50):(1-p)^(x-1)*p

...

50:(1-p)^49*p

51:(1-p)^50*(2p)

52:(1-p)^50*(1-2p)*(3p)

...

y(51<=y<=99):(1-p)^50*(1-2p)*(1-3p)*...*(1-(y-50)p)*((y-49)p)

下面求期望:

设N=(1-p)^50

则E=

1*p+

2*(1-p)*p+

...+

x*(1-p)^(x-1)*p+

...+

51*N*2p+

...+

y*N*(1-2p)*(1-3p)*...*(1-(y-50)p)*((y-49)p)

计算结果=34.59455

计算使用C++,数据类型使用double(可能会有精度不够,但影响不大,有兴趣的朋友可以使用高精度再做一下,我懒2333),代码会贴在末尾;

所以按期望看,差不多平均35发就能出货了呢(我已经抽了50多发3次了ヽ(`Д´)ノ)

然后再用经典的几何分布来代替本模型(即视为没有保底的机制)

Pn=(1-p)^(n-1)*p

期望E=1/p

所以如果视为没有保底,则每一次事件发生的概率p=1/34.59455=0.0289063;

结论

按现在公布的这个模型来算,明日方舟的抽卡期望为34.59455(即在大概35发左右出);

如果按没有保底的机制等价替换(即按期望相同算),单发的出货概率为0.0289063。

代码

#include <cstdio>

#include <cmath>

int main()

{

double p = 0.02;

double res = 0;

for (int i = 1; i <= 50; i++)

{

double tmp = pow((1 - p), (i - 1)) * p * i;

res += tmp;

}

double N = pow((1 - p), 50);

for (int i = 51; i <= 99; i++)

{

double tmp = N * i;

for (int j = 50; j < i - 1; j++)

{

tmp *= (1 - (i - j)*p);

}

tmp *= ((i - 49)*p);

res += tmp;

}

printf("%lf\n&#​34;, res);

return 0;

}

啊,这贴过来怎么tab就全被吞了呢......