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

Java 红包算法

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

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

    Java实现红包随机金额算法

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

    1.1K20

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

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

    7.1K20

    微信红包算法

    过年很多人会发微信的红包,但是为毛很多人说自己得不到最佳,因此作者写了一个微信红包发送的算法。...首先科普一下,微信红包的 规则 为: 红包金额的区间为 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.9K30

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

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

    70710

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

    发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 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.6K21

    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、每个人至少抢到一分钱。

    88530

    算法思考:红包金额生成

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

    1.3K30

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

    发出一个固定金额的红包,由若干个人来抢,需要满足哪些规则? 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.当随机切割点出现重复,如何处理。

    54230

    红包 | 教你使用 JAVA红包,次次都是运气王

    红包不是我所擅长的技能,但是要说到抢红包,我敢说只要网速给力,剩下的,你就交给我好了 好了,接下来,我们来说下,Java是如何后台实现抢红包的功能的,附Demo,并且先来了解下红包的一些规则和算法,...如下(随机拆分玩法): 1:每个红包金额不能小于0.01元 2:如果发送5个红包,则红包总金额不能小于0.01*5=0.05元 3:如果红包的个数大于1个,则每个红包的拆分金额不能等于红包总金额 4:...每个红包拆分的金额之和,等于红包的总金额 5:要随机拆分,并且是没有任何顺序 6:显示运气王 代码如下: /** * 抢红包逻辑代码 * @author likang */ public class...* @param price 红包总金额 * @param person 红包个数 */ public static void grapRed(int price...:" + b + "元 "); } } /** * 计算每人获得红包金额;最小每人0.01元 * @param redPrice 红包总额

    2.2K30

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

    本文实例讲述了PHP实现的随机红包算法。...分享给大家供大家参考,具体如下: 一、整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记录各种需要的数据 二、红包算法 简便起见..., 红包金额用整数表示, 假设每个红包里边有x个糖豆, 每个人最少一个豆 第一种: 每个红包的最大金额是: (剩余金额/剩余红包数)*2, 需要开始的时候预先分配给每个人一个豆 function randBean...max_bean - 1) { $list[] = $bean; $total_bean -= $bean; } } $list[] = $total_bean;//剩余的金豆作为最后一个红包...: (剩余金额/剩余红包数)*3; 但是要求每次最少发2个红包 第三种, 线段法, 随机生成几个数字, 将一个直线分成几段, 每段的长度(这个波动比较大, 不是很平均, 如果限制了每个红包的大小, 会比较麻烦

    89220

    Java实现抢红包算法,附完整代码(公平版和手速版)

    二倍均值法(公平版) 这是一种很合理很公平的抢红包算法了,绝对不会让你拼手速的,就别天真了。...在此我们假设 红包剩余金额为 M 红包剩余数量为 N 这种算法就是每次都在区间[0,M/N×2] 随机取一个数 假设100元红包发10个人,那么合理的做法应该是每个人领到10元的概率相同。...这个算法可以把总金额想象成一条线段,每个人都有机会切一刀,前面的人切剩下的后面的人再接着切,这样越是前面的人截取的长度(理解成领取到的红包金额)越大的概率就越大。...完整代码: package com.zhl.blogTest; import java.util.ArrayList; import java.util.List; import java.util.Random...; import java.util.Scanner; public class redEnvelope { /*Random 随机生成一个区间在[min , max]的数值 randNumber

    1.8K40

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

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

    22821

    Java实现微信抢红包

    2.二倍均值法这是一种很合理很公平的抢红包算法了在此我们假设红包剩余金额为 M红包剩余数量为 N这种算法就是每次都在区间[0,M/N×2] 随机取一个数假设100元红包发10个人,那么合理的做法应该是每个人领到...本文将以Java语言为基础,详细介绍微信抢红包的实现原理以及如何用Java来实现这一功能。1....技术实现3.1 使用Java语言实现微信抢红包功能可以借助Java的面向对象特性来实现。首先,可以定义一个红包类,包括红包的金额、个数和其他属性以及相关的方法。...然后,可以通过计算和算法来生成和拆分红包。3.2 使用Java的集合类如ArrayList来存储拆分后的红包金额,这样方便后续的发送和抢红包操作。...总结微信抢红包功能的实现需要通过互联网技术和算法来实现红包的生成、拆分、发送和抢夺等操作。Java作为一门流行的面向对象编程语言,提供了丰富的类库和工具来简化开发过程。

    42010
    领券