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 相关文章推荐
JAVASCRIPT IE 与 FF中兼容问题小结
Feb 18 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
Aug 27 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
jQuery实现鼠标划过展示大图的方法
Mar 09 Javascript
js实现常见的工具条效果
Mar 02 Javascript
JS得到当前时间的方法示例
Mar 24 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
Element Dropdown下拉菜单的使用方法
Jul 26 Javascript
JS实现页面鼠标点击出现图片特效
Aug 19 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
vue实现购物车加减
2020/05/30 Javascript
Python smallseg分词用法实例分析
2015/05/28 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python 多维List创建的问题小结
2019/01/18 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Python实现结构体代码实例
2020/02/10 Python
python模块如何查看
2020/06/16 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
REISS英国官网:伦敦High Street最受欢迎品牌
2016/12/21 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
.NET现在共支持多少种语言
2014/02/26 面试题
个人委托书如何写
2014/09/25 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
go开发alertmanger实现钉钉报警
2021/07/16 Golang
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android