栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用js模拟实现微信抢红包的算法,并说明你的思路

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用js模拟实现微信抢红包的算法,并说明你的思路

普惠红包

除了最后一人,其他每个人随机范围为 (0, 20),也相当于每人平均 10 块吧。
可以再打乱一次顺序来避免最后一人问题。

function grabMoney(total, maxTimes) {  //  结果数组   剩余次数剩余金额  var res = [], times = maxTimes, rest = total;  while (--times > 1) {    var r = random(0, rest / times * 2);    var _r = r.toFixed(2).replace('.', ''); // 处理双精度运算问题    var _rest = rest.toFixed(2).replace('.', '');    rest = (_rest - _r) / 100;    r = parseFloat(r.toFixed(2));    res.push(r);  }  res.push(rest);  return res;}

耗时红包

每人随机范围为 (0, 25),超出总价就重新排,低于总价则平摊。
由于有除法,余数计算误差大,所以系统会贪掉一丢丢。

function grabMoney(total, maxTimes) {  var res = new Array(maxTimes);  var grabed = 0;  for (var i=0; i<res.length; i++) {    var r = random(0, total / 4);    r = parseFloat(r.toFixed(2));    grabed += r;    if (grabed > total) return grabMoney(total, maxTimes);    res[i] = r;  }  if (grabed < total) {    var average = (total - grabed) / total;    res = res.map(function(item) {      return item + average;    });  }  return res;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370346.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号