思考一个小问题:微信群抢红包
本帖最后由 jerryxjr1220 于 2017-1-18 11:50 编辑现在微信群红包越来越多,也有越来越多的人热衷于强红包。
现在假设有一个10人的小群,每人每次出100元作为抢红包的本金,依次轮流。
抢红包分配规则:
每人抢的金额最少为0.01元,最大为(剩下金额/剩下人数)*2,每人最少可以分配到0.01元,最后一人拿完剩下所有的钱。
请设计这样的红包分配形式,以列表方式输出。
附加:如果有能力,请计算如果作为你参与其中,应该在什么时候去抢红包收益可以最大?(红包没有利息,也没有手续费)
解答:
程序输出应该没什么问题,建一个类用以生成红包分配列表。
规则就是除最后一个人之前的所有人抽取的红包金额,最小1分,最大为(剩下金额/剩下人数)*2;最后一人拿完剩下的钱。
为了便于计算采用“分”为单位。
例如输出:
附加题:用10万次模拟抽红包,看平均收益。
下面列出50万次的模拟统计结果:
1~10万次:
第1个人的平均收益:1001
第2个人的平均收益:997
第3个人的平均收益:999
第4个人的平均收益:1001
第5个人的平均收益:1000
第6个人的平均收益:996
第7个人的平均收益:999
第8个人的平均收益:1002
第9个人的平均收益:998
第10个人的平均收益:1000
10~20万次
第1个人的平均收益:1005
第2个人的平均收益:999
第3个人的平均收益:1004
第4个人的平均收益:998
第5个人的平均收益:1000
第6个人的平均收益:994
第7个人的平均收益:998
第8个人的平均收益:995
第9个人的平均收益:1000
第10个人的平均收益:1001
20~30万次:
第1个人的平均收益:999
第2个人的平均收益:998
第3个人的平均收益:998
第4个人的平均收益:1002
第5个人的平均收益:998
第6个人的平均收益:999
第7个人的平均收益:999
第8个人的平均收益:1001
第9个人的平均收益:995
第10个人的平均收益:1006
30~40万次:
第1个人的平均收益:1003
第2个人的平均收益:1000
第3个人的平均收益:999
第4个人的平均收益:1000
第5个人的平均收益:1000
第6个人的平均收益:999
第7个人的平均收益:1001
第8个人的平均收益:998
第9个人的平均收益:996
第10个人的平均收益:1001
40~50万次:
第1个人的平均收益:1001
第2个人的平均收益:998
第3个人的平均收益:1001
第4个人的平均收益:1001
第5个人的平均收益:998
第6个人的平均收益:1001
第7个人的平均收益:1001
第8个人的平均收益:999
第9个人的平均收益:996
第10个人的平均收益:998
从大数据的统计来看,其实无论什么时候去抢,收益都是差不多的。
当然如果次数不足够多,那就完全取决于随机数的大小了(运气){:5_109:}
源代码:**** Hidden Message ***** 本帖最后由 shigure_takimi 于 2018-1-17 08:19 编辑
import random
def divide(total = 10000, person = 10, n = 100000):
get =
for j in range(n):
amount = total
for i in range(0, person-1):
x = 2 * amount // (person - i)
a = random.randint(1, x)
get += a
amount -= a
get += amount
return
print(1, divide(n=1))
print(2, divide(n=1))
print('First 100,000 times simulation:',divide())
print('Second 100,000 times simulation:',divide())
# 输出:
#(1, )
#(2, )
#('First 100,000 times simulation:', )
#('Second 100,000 times simulation:', )
#可见单独一次来看,每个人抽到的金额差别比较大;但总体来看,先抽后抽没有差别。
学习 {:5_91:} {:5_90:} 看下 {:10_254:}{:10_254:}大佬,赶紧记下来 牛皮
页:
[1]