突发奇想给校友微信群发了红包,我设定红包总额为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.01至9.99之间的某个随机数

第二个红包=10-第一个红包金额;

N=3

红包1=0.01至0.98之间的某个随机数

红包2=0.01至(10-红包1-0.01)的某个随机数

红包3=10-红包1-红包2

……

至此,规律出现啦!开始编码!

Php代码

输入一看,波动太大,这数据太无趣了!

第1个红包:7.48 元,余额:2.52 元

第2个红包:1.9 元,余额:0.62 元

第3个红包:0.49 元,余额:0.13 元

第4个红包:0.04 元,余额:0.09 元

第5个红包:0.03 元,余额:0.06 元

第6个红包:0.03 元,余额:0.03 元

第7个红包:0.01 元,余额:0.02 元

第8个红包:0.02 元,余额:0 元

改良一下,将平均值作为随机安全上限来控制波动差

Php代码

输出结果见下图

第1个红包:0.06 元,余额:9.94 元

第2个红包:1.55 元,余额:8.39 元

第3个红包:0.25 元,余额:8.14 元

第4个红包:0.98 元,余额:7.16 元

第5个红包:1.88 元,余额:5.28 元

第6个红包:1.92 元,余额:3.36 元

第7个红包:2.98 元,余额:0.38 元

第8个红包:0.38 元,余额:0 元

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

微信红包 php算法,基于PHP微信红包的算法探讨相关推荐

  1. 推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法

    概述 历史 1992年,Goldberg.Nicols.Oki及Terry提出 基本思想 爱好相似的用户喜欢的东西可能也会喜欢 优点 共享朋友的经验,提高推荐的准确度 根据爱好相似的用户喜欢的视频进行 ...

  2. 推荐算法——基于用户的协同过滤算法(User-base CF)的java实现

    推荐算法--基于用户的协同过滤算法(User-base CF)的java实现 推荐系统 什么是推荐系统 为什么要有推荐系统 推荐算法 基于用户的协同过滤算法(User-base CF) 算法介绍 代码 ...

  3. 推荐算法-基于协同过滤的推荐算法

    推荐算法-基于协同过滤的推荐算法 在如今信息量呈爆炸式增长的时代,谷歌百度等搜索引擎为人们查找信息提供了便利,帮助用户快速查找有价值的信息.然而此类查询方式是大众化的,无法根据个人兴趣为用户展示相关的 ...

  4. 微信红包php算法,基于PHP微信红包的算法探讨

    搜索热词 突发奇想给校友微信群发了红包,我设定红包总额为10元,支持28个人随机领取. 于是一个有趣的结果出现了: A 领取了 0.26元 B 领取了 0.29元 C 领取了 0.02元 D 领取了 ...

  5. c语言凸包算法,基于C语言的凸包算法实现

    基于C语言的凸包算法实现 非计算机专业,代码有些的不好的地方,大佬轻喷^ _ ^ 根据要求,需要使用C语言实现凸包算法--Graham扫描法,本文将从算法理解.实现思路.遇到的问题及其解决方案三个方面 ...

  6. C语言LMS双麦克风消噪算法,基于两个时域LMS算法双麦克风系统分析.doc

    基于两个时域LMS算法双麦克风系统分析 基于两个时域LMS算法双麦克风系统分析 [摘要] 本文介绍了基于两个时域LMS算法的双麦克风系统结构以及性能分析.本文提出一种采用两个时域LMS的算法,并将此算 ...

  7. 蒙特卡洛粒子滤波定位算法_蒙特卡罗定位算法(基于粒子滤波的定位算法) ——原理、理解与仿真...

    1 算法原理 1.1 机器人定位问题 关于机器人定位,有三大问题,它们分别是: (1)"全局定位":指初始位置未知,机器人靠自身运动确定自己在地图中的位姿. (2)"位姿 ...

  8. matlab中值滤波法算法,基于MATLAB中值滤波算法的优化与实现

    总第238期2014年第4期 舰 船 电 子 工 程 Ship Electronic Engineering Vol.34No.437 基于 MATLAB中值滤波算法的优化与实现* 赵建春 刘力源 ( ...

  9. doa的matlab算法,基于MATLAB的DOA估计算法的二维仿真建模

    基本描述: DOA算法使用T形或L形天线接收微波信号,计算到达角,然后对二维坐标建模. 要解决的问题: 实际环境中存在多个相干源(例如多径效应,信号反射等),并给出了最佳DOA估计算法. 功能描述: ...

最新文章

  1. Nodejs进阶:express+session实现简易身份认证
  2. Mac+docker+flask
  3. spring学习(15):required属性
  4. android studio gradle 自动更新,android studio gradle 两种更新方法更新
  5. 排序第一天,回忆关键字
  6. android 电视遥控 编程,Android编程调用红外线遥控功能示例
  7. 铁芯用matlab怎么仿真,Simulink的BLDC建模与仿真
  8. Qt QLineEdit QLabel 添加clicked事件
  9. mac book air 外接USB无线网卡TP-LINK TL WN821N
  10. 三阶齐次线性方程求通解_三阶常系数齐次线性差分方程解的分类
  11. 网站瞬间变黑白颜色代码
  12. 生成缩略图 java_java实现生成缩略图
  13. [全程动图]解决Offline Explorer崩溃闪退的问题和一些小技巧(如何下载js、100线程下载)
  14. 一个能防止改名木马漏洞的无组件上传类
  15. Redis-使用和原理
  16. 软件项目管理-第三章生存期模型
  17. 教你用Python绘制3D地图,做出来效果太酷炫啦~
  18. 在maven中使用c3p0连接池的c3p0-config.xml文件出现named-config with name ‘xxxxx‘ does not exist. Using default-con
  19. 前端基础之Html、CSS、JavaScript、JQuery、Ajax
  20. 软件需求说明书(文档模板)

热门文章

  1. 九宫格构图学习[1]
  2. Oracle数据库:oracle外连接left/right/full outer join on,oracle扩展的左右外连接展示符号(+)
  3. 优势比(Odds Ratios)
  4. 常用设计模式系列(四)—建造者模式
  5. Fleck webSocket
  6. Msg 547 The ALTER TABLE statement conflicted with the CHECK constraint .
  7. ios 七种手势详解
  8. 相对于就业来讲,前端工程师和后端开发哪个比较好?
  9. C#数字转字母,ASCII码转换
  10. 关于FPGA实时数字FIR滤波器的实现