红包游戏规则:初始价3元,一次封10个,允许自己抢自己封的红包,抢到金额最大的按所抢金额5倍接龙继续封,若金额低于1元则以初始价重新开始,一旦参加抢红包就默认同意以上规则。
用代码模拟上面规则,看在发多少次红包之后金额会上去。在这里首先要猜测一下微信产生随机数的规则。先参考一下知友的回答:
http://www.zhihu.com/question/22625187 中 马景鋮的回答。
微信红包随机数服从截尾正态分布。
由此可以用python代码实现如下:
#coding=utf-8
import numpy as np
import pandas as pd
import random
#产生正态随机数
def yield_gifts(money,num):
return [random.normalvariate(money/num,2) for x in range(num)]
def red_envelopes_game(i,begin_money,num,end_money):
gifts_ser=pd.Series(yield_gifts(begin_money,num))
#正态随机数截尾
gifts_ser=abs(gifts_ser)
gifts_ser=gifts_ser/gifts_ser.sum()*begin_money
next_money=gifts_ser.max()*5
if i>500: return
if next_money>end_money:
return i+1
else:
return red_envelopes_game(i+1,next_money,num,end_money)