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 相关文章推荐
用jscript启动sqlserver
Jun 21 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
Nov 20 Javascript
jquery 中toggle的2种用法详解(推荐)
Sep 02 Javascript
JavaScript组件开发之输入框加候选框
Mar 10 Javascript
在 Angular 中实现搜索关键字高亮示例
Mar 21 Javascript
jQuery扇形定时器插件pietimer使用方法详解
Jul 18 jQuery
react学习笔记之state以及setState的使用
Dec 07 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
ajax请求+vue.js渲染+页面加载的示例
Feb 11 Javascript
iview日期控件,双向绑定日期格式的方法
Mar 15 Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 Javascript
js实现随机点名器精简版
Jun 29 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简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
微信小程序背景音乐开发详解
2019/12/12 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
Python中的字符串替换操作示例
2016/06/27 Python
python实现外卖信息管理系统
2018/01/11 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
Blank NYC官网:夹克、牛仔裤等
2020/12/16 全球购物
幼师专业毕业生自荐信
2013/09/29 职场文书
写给保洁员表扬信
2014/01/08 职场文书
人民调解协议书范本
2014/10/11 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
企业投资意向书
2015/05/09 职场文书
建党伟业的观后感
2015/06/01 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
python 如何获取页面所有a标签下href的值
2021/05/06 Python
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers
MySQL普通表如何转换成分区表
2022/05/30 MySQL