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

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

用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;}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/4903762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存