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 相关文章推荐
top.location.href 没有权限 解决方法
Aug 05 Javascript
window.location.reload()方法刷新页面弹出要再次显示该网页对话框
Apr 24 Javascript
Javascript实现多彩雪花从天降散落效果的方法
Feb 02 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
JS控制HTML元素的显示和隐藏的两种方法
Sep 27 Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 Javascript
基于daterangepicker日历插件使用参数注意的问题
Aug 10 Javascript
原生javascript实现的全屏滚动功能示例
Sep 19 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
Vue 引入AMap高德地图的实现代码
Apr 29 Javascript
基于javascript实现日历功能原理及代码实例
May 07 Javascript
在vant中使用时间选择器和popup弹出层的操作
Nov 04 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 adodb连接不同数据库
2009/03/19 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
jquery ajax 局部无刷新更新数据的实现案例
2014/02/08 Javascript
简述JavaScript的正则表达式中test()方法的使用
2015/06/16 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
2016/09/27 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
JS实现按钮添加背景音乐示例代码
2017/10/17 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python里隐藏的“禅”
2014/06/16 Python
Python的randrange()方法使用教程
2015/05/15 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
python日志记录模块实例及改进
2017/02/12 Python
Python自动生产表情包
2017/03/17 Python
Python获取SQLite查询结果表列名的方法
2017/06/21 Python
Python使用progressbar模块实现的显示进度条功能
2018/05/31 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
opencv python图像梯度实例详解
2020/02/04 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
《三顾茅庐》教学反思
2014/04/10 职场文书
个人担保书格式范文
2014/05/12 职场文书
客房部经理岗位职责
2015/02/02 职场文书
何玥事迹观后感
2015/06/16 职场文书
为什么 Nginx 比 Apache 更牛逼
2021/03/31 Servers
Python加密技术之RSA加密解密的实现
2022/04/08 Python
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL
如何使用python包中的sched事件调度器
2022/04/30 Python