祝各种小伙伴周末愉快,今天周日,我们用Excel来娱乐一下,模拟一下发红包的算法,100元发10个红包,然后金额分布情况,模拟1万次,看手气最佳分布的位置。
这个算法在工作中的应用场景就是,固定的一个数据,然后生成N个随机数,这N个随机的总和等于这个固定的数据。
❶首先我们建立辅助项,输入的公式是:=($C$1-SUM($C$2:C2))/($A$1-A2)*2-0.01
C3至C11的公式为:=RANDBETWEEN(1,B3*100)/100
C12的公式为:=C1-SUM(C3:C11)
这个公式看起来复杂,其实是来源一个算法思路。
首先B列给定了红包的分布区间最大值,C列的红包是在这个区间内产生随机数。
B列红包区间的定义思路是:
在第1个红包的时候,每个人平均可以拿到100/10=10元,所以第1个红包的金额范围在0.01-19.9元内随机,到第2个红包的时候,后面的人平均可以拿到(100-第1个已领取的4.4)/9,然后第2个红包的金额范围在0.01-2倍平均值之间,以此推下去,最后一个的金额用总金额减掉前面所有的金额,保证了最后一个人的金额至少为0.01
根据这个思路,才产生的上述的公式,再去理解的话,就能够理解了。
❷然后我们计算手气最佳出现在第几个
使用公式计算出现的位置:
=MATCH(MAX(C3:C12),C3:C12,0)
❸然后我们模拟10000次,记录这10000次手机最佳出现的位置,这个工作用VBA来完成,我们按ATL+F11,插入一个模块,然后输入代码,运行
Sub 模拟() For i = 1 To 10000 Cells(i, "h") = [f1] Next i End Sub
运行这段代码,得到了1万个手气最佳的数据
最后我们用数据透视表也好,用countifs计数也好,我们做了3次1万次的计数分析。
从数据的分布情况看,第1个或最后抢红包的人出现手气最佳的概率是大一点,所以大家抢红包的时候都慢点抢吧。。。
---------------
作者:小H