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 26 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
Nov 14 Javascript
jQuery中选择器的基础使用教程
May 23 Javascript
AngularJS  自定义指令详解及实例代码
Sep 14 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
jQuery操作json常用方法示例
Jan 04 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
Sep 18 Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 Javascript
详解js中的几种常用设计模式
Jul 16 Javascript
vue-model实现简易计算器
Aug 17 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中利用XML技术构造远程服务(上)
2006/10/09 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
一段实用的php验证码函数
2016/05/19 PHP
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
JQuery中Bind()事件用法分析
2015/05/05 Javascript
Jquery基础教程之DOM操作
2015/08/19 Javascript
基于javascript实现浏览器滚动条快到底部时自动加载数据
2015/11/30 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Python打包可执行文件的方法详解
2016/09/19 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
区域销售经理岗位职责
2013/12/10 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
中学教师培训制度
2014/01/31 职场文书
活动总结结尾怎么写
2014/08/30 职场文书