jerryxjr1220 发表于 2017-1-18 09:12:32

思考一个小问题:微信群抢红包

本帖最后由 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-16 20:32:44

本帖最后由 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:', )
#可见单独一次来看,每个人抽到的金额差别比较大;但总体来看,先抽后抽没有差别。

新水友 发表于 2018-2-15 18:08:23

学习

A13 发表于 2018-2-16 22:20:45

{:5_91:}

染黑 发表于 2018-2-17 06:29:49

{:5_90:}

qaz123765 发表于 2019-7-16 08:46:44

看下

Stevan 发表于 2020-1-20 11:12:33

{:10_254:}{:10_254:}大佬,赶紧记下来

白云间_墨柒 发表于 2022-1-31 00:42:35

牛皮
页: [1]
查看完整版本: 思考一个小问题:微信群抢红包