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 Base64编码和解码,实现URL参数传递。
Sep 18 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
Sep 10 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
深入浅析JavaScript中的Function类型
Jul 09 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
Vue shopCart 组件开发详解
Jan 26 Javascript
基于Vue实现拖拽功能
Jul 29 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
JS实现基本的网页计算器功能示例
Jan 16 Javascript
Vue自定义多选组件使用详解
Sep 08 Javascript
js实现圆形菜单选择器
Dec 03 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读取数据库信息的几种方法
2008/05/24 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP5常用函数列表(分享)
2013/06/07 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
2009/11/12 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
原生js实现简单的焦点图效果实例
2017/12/14 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
详解微信小程序input标签正则初体验
2018/08/18 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
有趣的python小程序分享
2017/12/05 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限
2012/12/13 面试题
几道数据库的面试题或笔试题
2014/05/31 面试题
2014全国两会学习心得体会2000字
2014/03/10 职场文书
运动会通讯稿50字
2015/07/20 职场文书
Python基础知识之变量的详解
2021/04/14 Python
golang 实现Location跳转方式
2021/05/02 Golang
Python打包为exe详细教程
2021/05/18 Python