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 相关文章推荐
动态加载js的几种方法
Oct 23 Javascript
JS获取父节点方法
Aug 20 Javascript
让人期待的2011年度最佳 jQuery 插件分享
Mar 16 Javascript
javascript数组详解
Oct 22 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
JavaScript基础知识点归纳(推荐)
Jul 09 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
Aug 25 Javascript
深入理解bootstrap框架之入门准备
Oct 09 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
May 31 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将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
php微信开发之关注事件
2018/06/14 PHP
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
extjs render 用法介绍
2013/09/11 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
Js利用Canvas实现图片压缩功能
2017/09/13 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
python将logging模块封装成单独模块并实现动态切换Level方式
2020/05/12 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
Python高并发和多线程有什么关系
2020/11/14 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
自荐信格式技巧有哪些呢
2013/11/19 职场文书
服务质量承诺书
2014/03/27 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL