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 01 Javascript
append和appendTo的区别以及appendChild用法
Dec 24 Javascript
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
jQuery+PHP打造滑动开关效果
Dec 16 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
Feb 05 Javascript
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
Node.JS循环删除非空文件夹及子目录下的所有文件
Mar 12 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
Aug 11 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
Vue数据双向绑定原理实例解析
May 15 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
文章推荐系统(二)
2006/10/09 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
IE php关于强制下载文件的代码
2008/08/23 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
详解react-native-fs插件的使用以及遇到的坑
2017/09/12 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
详解VUE调用本地json的使用方法
2019/05/15 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
Python遍历pandas数据方法总结
2018/02/09 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
css3实现一个div设置多张背景图片及background-image属性实例演示
2017/08/10 HTML / CSS
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
2014年医生工作总结
2014/11/21 职场文书
长江三峡导游词
2015/01/31 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python