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

PHP实现的随机红包算法示例

本文实例讲述了PHP实现的随机红包算法。...分享给大家供大家参考,具体如下: 一、整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记录各种需要的数据 二、红包算法 简便起见..., 红包金额用整数表示, 假设每个红包里边有x个糖豆, 每个人最少一个豆 第一种: 每个红包的最大金额是: (剩余金额/剩余红包数)*2, 需要开始的时候预先分配给每个人一个豆 function randBean...: (剩余金额/剩余红包数)*3; 但是要求每次最少发2个红包 第三种, 线段法, 随机生成几个数字, 将一个直线分成几段, 每段的长度(这个波动比较大, 不是很平均, 如果限制了每个红包的大小, 会比较麻烦...去掉这些必须剩余的豆数后, 以剩下的豆数的平均值为最大值进行随机生成本次豆数 PS:这里再为大家提供两款功能类似的在线工具供大家参考: 在线随机数字/字符串生成工具: 在线随机字符/随机密码生成工具: 希望本文所述对大家PHP

84620
您找到你想要的搜索结果了吗?
是的
没有找到

Java 红包算法

2015年的红包的拆和抢是分离的,需要点两次,因此会出现抢到红包了,但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到,只表示当时红包还有。 分配:红包里的金额怎么算?...注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法(Tim老师也觉得上述算法太复杂,不知基于什么样的考虑)。...这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。...答:一个红包只占一条记录,有效期只有几天,因此不需要太多空间。 8.询红包分配,压力大不? 答:抢到红包的人数和红包都在一条cache记录上,没有太大的查询压力。 9.一个红包一个队列?...答:没有队列,一个红包一条数据,数据上有一个计数器字段。 10.有没有从数据上证明每个红包的概率是不是均等? 答:不是绝对均等,就是一个简单的拍脑袋算法。 11.拍脑袋算法,会不会出现两个最佳?

1.4K65

红包随机算法&微信群红包随机算法

2.参考微信群红包算法 本质上,这和微信群红包没什么区别,发出一个固定总金额的红包,指定红包数量,那么随机分配红包金额时需要满足哪些规则?...微信群红包金额分配算法是这样的: 每次抢红包直接随机,随机的范围是[1, 剩余红包金额均值的两倍],单位分 这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。...红包金额随机分配算法不是一个标准算法,而是产品逻辑。...3.一个可用的随机算法 此次年会产品同学开始跟我说需要像微信群红包那样的随机分配红包金额,但是仔细研究了微信群红包算法,才发现产品同学想要的效果和微信群红包并不同,她想要的是红包金额严格随机范围在 [...---- 参考文献 [1] 漫画:如何实现抢红包算法? [2] 微信拼手气红包背后的算法逻辑

6.9K20

微信红包算法

过年很多人会发微信的红包,但是为毛很多人说自己得不到最佳,因此作者写了一个微信红包发送的算法。...首先科普一下,微信红包的 规则 为: 红包金额的区间为 0.01 - 平均值的2倍 该规则为 微信团队公布的算法 ,读者可自行上网查找相关信息。...这也就是说,假设给10个人发送100元的红包,那么: 第一个人得到金额的区间为[0.01,20] 假设 前三个人 领到的红包为50元,那么此时红包还剩下 7个人 没有领取红包红包还剩下 50元 ,那么下一个人可以得到的最大金额为...: (100-50)/(10-3)*2=14.29 第四个人得到的金额的区间为[0.01,14.29] 以此类推,最终可以将红包领完,python的代码为: # 领红包的主要程序 def distribute...else: print("输入的不是整数,请重新输入...") ---- 微信红包群的还有如下规则: 微信群 最多人数 默认500 微信红包 最大金额 为200元 因此,作者加入多进程后

6.8K30

解密微信红包算法及抢红包案例实现

前言微信红包大家应该不陌生吧,别看小小的一个红包,涉及到技术涵盖很多方面的,比如如图所示,用户发一个红包,会涉及发红包红包存储,红包拆分,抢红包等流程。...本文将详细介绍,一个红包从诞生到过期的整个流程,并且通过代码案例实践讲解,而且重点会分析讲解红包的拆分算法。...微信红包设计流程依照发红包红包拆分,抢红包的流程来涉及整个红包流程,采用什么数据结构进行红包设计,由于抢红包,是高并发的,并且响应也要及时,所以采用Redis非关系数据库来设计,是比MySQL好,主要...拆红包算法:拆红包算法其实有很多,但是比较合理的可以采用二倍均值算法代码实现二倍均值算法实现拆红包二倍均值,字面也是是红包平均金额的两倍,为了保证随机,取随机区间,最大值为平均金额的两倍,所以最后公式如下...splitRedPackageNumbers[i] = totalMoney - useMoney; }else { // 二倍均值算法

44810

漫画:如何实现抢红包算法

发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 1.所有人抢到金额之和等于红包金额,不能超过,也不能少于。 2.每个人至少抢到一分钱。 3.要保证所有人抢到金额的几率相等。 ?...方法1:二倍均值法 剩余红包金额为M,剩余人数为N,那么有如下公式: 每次抢到的金额 = 随机区间 (0, M / N X 2) 这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平...//发红包算法,金额参数以分为单位 public static List divideRedPackage(Integer totalAmount, Integer totalPeopleNum...当N个人一起抢红包的时候,就需要确定N-1个切割点。 因此,当N个人一起抢总金额为M的红包时,我们需要做N-1次随机运算,以此确定N-1个切割点。随机的范围区间是(1, M)。...这样每个人来抢红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。 这就是线段切割法的思路。在这里需要注意以下两点: 1.当随机切割点出现重复,如何处理。

3.5K21

C# 实现抢红包算法

二倍均值法(公平版) 发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 1、所有人抢到金额之和等于红包金额,不能超过,也不能少于。 2、每个人至少抢到一分钱。...假设剩余红包金额为M,剩余人数为N,那么有如下公式: 每次抢到的金额 = 随机区间 (0, M / N × 2) 这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。...System.Security.Cryptography.RNGCryptoServiceProvider(); rng.GetBytes(bytes); return BitConverter.ToInt32(bytes, 0); } 线段切割法(手速版) 算法思路如下...当N个人一起抢红包的时候,就需要确定N-1个切割点。 因此,当N个人一起抢总金额为M的红包时,我们需要做N-1次随机运算,以此确定N-1个切割点。 随机的范围区间是(1, M)。...这样每个人来抢红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。 需要注意一下两点: 1、每个人至少抢到一分钱。

83230

算法思考:红包金额生成

一 背景 最近在整理过去的项目时,回顾了某年红包活动,其中涉及红包金额计算的算法。近些年各家大厂举办的春节红包活动越来越完善,关于活动背后的整体设计介绍、分析、探讨层出不穷。...二 题目描述 要求设计在微信群抢红包算法红包总金额为 m 元,分成 n 份,要求返回一个红包金额数组。...算法需要满足下面的几条要求: (1)前 n 个抢红包的人都能抢到钱,第 n 个之后的人直接返回空包,所以这里不做考虑; (2)每个人能抢到的红包金额是随机的,但随机范围最大化(有机会获得可能的最多金额)...三 传说中微信红包算法 网上其实可以搜到很多关于红包金额计算方法的解析,例如 微信红包的随机算法是怎样实现的?...事实上,如果 java 中有类似 php 中 shuffle(洗牌,做数组随机乱序)的方法,那么就可以直接使用来做第二步的乱序逻辑了。更多的优化,留给大家来思考了。

1.2K30

Java实现红包随机金额算法

2015年的红包的拆和抢是分离的,需要点两次,因此会出现抢到红包了,但点开后告知红包已经被领完的状况。进入到第一个页面不代表抢到,只表示当时红包还有。 分配:红包里的金额怎么算?...注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法(Tim老师也觉得上述算法太复杂,不知基于什么样的考虑)。...这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。...答:一个红包只占一条记录,有效期只有几天,因此不需要太多空间。 8.询红包分配,压力大不? 答:抢到红包的人数和红包都在一条cache记录上,没有太大的查询压力。 9.一个红包一个队列?...答:没有队列,一个红包一条数据,数据上有一个计数器字段。 10.有没有从数据上证明每个红包的概率是不是均等? 答:不是绝对均等,就是一个简单的拍脑袋算法。 11.拍脑袋算法,会不会出现两个最佳?

99020

漫画:如何实现抢红包算法

发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 1.所有人抢到金额之和等于红包金额,不能超过,也不能少于。 2.每个人至少抢到一分钱。 3.要保证所有人抢到金额的几率相等。...方法1:二倍均值法 剩余红包金额为M,剩余人数为N,那么有如下公式: 每次抢到的金额 = 随机区间 (0, M / N X 2) 这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平...//发红包算法,金额参数以分为单位 public static List divideRedPackage(Integer totalAmount, Integer totalPeopleNum...当N个人一起抢红包的时候,就需要确定N-1个切割点。 因此,当N个人一起抢总金额为M的红包时,我们需要做N-1次随机运算,以此确定N-1个切割点。随机的范围区间是(1, M)。...这样每个人来抢红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。 这就是线段切割法的思路。在这里需要注意以下两点: 1.当随机切割点出现重复,如何处理。

50530

php生成微信红包数组的方法

php/ * @param $total [你要发的红包总额] * @param int $num [发几个] @return array [生成红包金额] /function getRedGift($...total, $num = 10) { $min = 0.01;//最小的红包金额$wamp = array(); $returnData = array(); for ($i = 1; $i < $num...; $i++) { $safe_total = ($total - ($num - $i) * $min) / ($num - $i); //当前允许红包金额的最大值if ($safe_total..., mt_rand(min,max)是生成min到max的随机整数,包含min和max,所以为了生成的红包金额有小数,所以*100先,再100$total = $total - $money; //剩余红包总额...总结 以上所述是小编给大家介绍的php生成微信红包数组的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

97221

跟你揭秘抢红包背后的算法

又快到春节了,春节最幸福莫过于有红包收;而在某年因为手机抢红包而红遍大江南北的微信将春节加了一把火。那我们今天就来说说抢红包的机制及后面的算法。...首先抢红包必须要满足以下的条件: 1、所有人抢到的金额加起来必须等于红包的金额,不能少或多。这是必须的。 2、每个人的金额尽量平均,这样体现公平工作。...首先我想到的是当发红包时,立即进行划分,例如:100元,立即划分为5分,当然不能平均(100/5=20)这样肯定无法体现金额多少的乐趣。那怎么处理呢。。...当这个后我发现还有一个算法: 每次抢到的金额=随机区间[0.01, m/n x 2 - 0.01]元 这个比较简单点,至于行不行就各位自己测试了。。...} Console.WriteLine("Program End:"); } } } 为什么要写这篇文字呢,是因为这种算法很多时候需要用到

19821

java和python写抢红包算法代码

remainAmount.divide(new BigDecimal(remainPeople), 2, BigDecimal.ROUND_HALF_UP)); return amounts; }}这种算法是普通的红包算法...remainAmount.subtract(amount); } amounts.add(remainAmount); return amounts; }}这种算法是带权红包平均算法...remain_amount / remain_people).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)) return amounts这种算法是普通的红包算法...分配过程中,每个人的红包金额的上限是当前红包总金额除以当前剩余人数抢红包算法是一种常见的随机分配算法,常用于红包等奖励的随机分配。以下是使用Java和Python编写的三种抢红包算法及其实现。...综上所述,三种抢红包算法各有优缺点,根据实际需求选择合适的算法

68630

别人在抢红包,而程序员在研究微信红包算法实现

链接:http://blog.cqcoder.com/微信红包算法实现探讨/ 突发奇想给校友微信群发了红包,我设定红包总额为10元,支持28个人随机领取 于是一个有趣的结果出现了 A 领取了 0.26...元 B 领取了 0.29元 C 领取了 0.02元 D 领取了 0.56元 E 领取了 0.64元 …… 微信是采用什么样的算法做到的?...我按照自己的逻辑尝试了下,这个算法需要满足以下几点要求: 1、每个人都要能够领取到红包; 2、每个人领取到的红包金额总和=总金额; 3、每个人领取到的红包金额不等,但也不能差的太离谱,不然就没趣味; 4...、算法一定要简单,不然对不起腾讯这个招牌; 正式编码之前,先搭建一个递进的模型来分析规律 设定总金额为10元,有N个人随机领取: N=1 则红包金额=X元; N=2 为保证第二个红包可以正常发出,...:0 元 如果你有更好更简单的算法,欢迎讨论。

1.6K100
领券