JavaScript实现微信红包算法及问题解决方法


Posted in Javascript onApril 26, 2018

专栏停更了很久,向大家说声抱歉。今天的主题是使用JavaScript模拟实现微信抢红包的算法。这个题目看起来很简单,不就是一个随机函数吗?我们一起实现看看。

我们假设有一个100元的红包,要发给10个人。为了保证公平,算法需要保证以下的原则:

  • 每个人最少能抢到0.01元
  • 每个人的机会平等
  • 所有人的金额之和等于100元

1.简单的随机函数实现

很多朋友的一般思路是:

第一步:从0-100中随机一个数,得到第一个红包金额。

第二步:从0-剩余金额中随机一个数,得到第二个红包金额。

第三步:...

最后一步把剩余的钱都给最后一个人。

以此类推,得到全部的10 个红包。但是不知道大家注意到没有,这样存在明显的 不公平 。先抢的人比较有优势,第一个人的随机范围是0-100,有可能得到较大的金额。而最后一个人的随机范围就会很小,如果第一个人抢到了90块钱,那么最后一个人就不可能有的到超过10块钱的机会。我们用代码模拟一下这个过程:

JavaScript实现微信红包算法及问题解决方法 

测试结果如下:

JavaScript实现微信红包算法及问题解决方法 

细心的朋友会注意到,余额的值不正确,这是JavaScript浮点数运算的已知问题。当然解决的方式有很多,如果你有好的办法欢迎你给我留言。

总结

以上所述是小编给大家介绍的JavaScript实现微信红包算法及问题解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
iis6+javascript Add an Extension File
Jun 13 Javascript
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
原生js的数组除重复简单实例
May 24 Javascript
全面解析JavaScript中“&&”和“||”操作符(总结篇)
Jul 18 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
浅谈JavaScript的自动垃圾收集机制
Dec 15 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
Node.js实现连接mysql数据库功能示例
Sep 15 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
vue cli3.0 引入eslint 结合vscode使用
May 27 Javascript
微信小程序select下拉框实现源码
Nov 08 Javascript
react 创建单例组件的方法
Apr 26 #Javascript
node打造微信个人号机器人的方法示例
Apr 26 #Javascript
Vue 使用中的小技巧
Apr 26 #Javascript
基于Vue实现拖拽功能
Jul 29 #Javascript
vuex操作state对象的实例代码
Apr 25 #Javascript
微信小程序商品详情页的底部弹出框效果
Nov 16 #Javascript
你点的 ES6一些小技巧,请查收
Apr 25 #Javascript
You might like
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
Destoon实现多表查询示例
2014/08/21 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
php组合排序简单实现方法
2016/10/15 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
详解基于node.js的脚手架工具开发经历
2019/01/28 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
记录vue做微信自定义分享的一些问题
2019/09/12 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
django的ORM模型的实现原理
2019/03/04 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
大学毕业自我鉴定范文
2014/02/03 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
革命电影观后感
2015/06/18 职场文书
Python中time与datetime模块使用方法详解
2022/03/31 Python