首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个关于红包的问题引发的python算法初体验

有个初学python的小伙伴,在群里问我关于实现抢红包的算法的问题,于是就有了以下对话

这里,这位同学的思路是这样的:

每次抢到的金额 = 随机区间 ( 0.01, 剩余金额 )

为什么我这样说呢?我们来举个栗子:

假设10个人抢100元的红包:

第一个人随机的范围是(0.01,100),平均是50元,假如第一个人抢到了50元,

第二个人随机的范围是(0.01,50),平均是25元,如果这个人抢到了25元,那往下推的话,就会发现第三个人的范围是(0.01,25)……

越往后金额越低,我们写段代码来看看

我们的思路是这样的:

剩余红包金额为M,剩余人数为N,那么有如下公式:

每次抢到的金额 = 随机区间 (0.01, M / N X 2)

这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。

举个栗子:

假设有10个人,红包总额100元。

100/10X2 = 20, 所以第一个人的随机范围是(0.01,20 ),平均可以抢到10元。

假设第一个人随机到10元,那么剩余金额是100-10 =90 元。

90/9X2 = 20, 所以第二个人的随机范围同样是(0.01,20 ),平均可以抢到10元。

假设第二个人随机到10元,那么剩余金额是90-10 =80 元。

80/8X2 = 20, 所以第三个人的随机范围同样是(0.01,20 ),平均可以抢到10元。

以此类推,每一次随机范围的均值是相等的。

我们来写代码实现一下:

大致思路如下:

先将红包m分成n份,然后随机n次取出红包

这里有2个地方需要注意:

出现重复的处理办法

尽可能的降低时间和空间的复杂度

这里就不写代码了,大家有兴趣可以去研究下哦!

这里要说明下,微信或者QQ的红包规则很可能就是最后一种方式,当然没有见过代码也说不准,大家有兴趣可以找找相关资料的!

欢迎大家来和我一起研究算法,研究python,交流学习哦!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180501A0PK5500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券