昨天有个小伙伴在微信群里发一篇文章《如何实现抢红包算法》,本着学习的精神(上班太闲) 打开了看看。
文章主要是介绍了两种方法
1.二倍均值法
剩余红包金额为M,剩余人生为N,那么有如下的公式:
每次抢到的金额 = 随机区间 (0, M/N *2)
举个例子:
假设有10个人,红包金额为10元,
第1个人抢到的金额范围为 (0, 10/10 * 2),平均为1 元。
第2个人抢到的金额范围为 (0, 9/9 * 2),平均为1 元。
...
第10个人抢到的金额范围为 (0, 1/1 * 2),平均为1 元。
代码如下:
import random
from __future__ import division
def average(amount, nums):
remain_num = nums
for num in range(nums):
if remain_num == 1:
value = amount
else:
value = round(random.uniform(0.01, amount/remain_num * 2), 2)
amount -= value
remain_num -= 1
print('第{}个人抢到{}元红包,剩余红包{}元'.format(num+1, value, amount))