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 相关文章推荐
基于JQuery的类似新浪微博展示信息效果的代码
Jul 23 Javascript
jquery连缀语法如何实现
Nov 29 Javascript
onmouseover和onmouseout的一些问题思考
Aug 14 Javascript
JS读取XML文件示例代码
Nov 15 Javascript
jsp网页搜索结果中实现选中一行使其高亮
Feb 17 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
Oct 07 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
纯JS实现轮播图
Feb 22 Javascript
bootstrap multiselect 多选功能实现方法
Jun 05 Javascript
详解Angular5路由传值方式及其相关问题
Apr 28 Javascript
node学习笔记之读写文件与开启第一个web服务器操作示例
May 29 Javascript
js实现图片3D轮播效果
Sep 21 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
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
python使用代理ip访问网站的实例
2018/05/07 Python
详解python中的模块及包导入
2019/08/30 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
pandas分组聚合详解
2020/04/10 Python
python属于跨平台语言码
2020/06/09 Python
python通过cython加密代码
2020/12/11 Python
英语专业学生个人求职信
2014/01/28 职场文书
解除合同协议书
2014/04/17 职场文书
车队安全员岗位职责
2015/02/15 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers