背景:
做为一名贫困的月光搬砖党,如果想每天加餐能够多加一块肉。那么就得靠微信红包手速抢红包,所以为了实现梦想。我给自己制定了目标,先抢够一个亿。
可是这几天微信红包手气,完全都不忍直视呀。每次都手气最差,就连自己的发的红包自己抢,也还是抢几分钱。阿西吧!早餐包子钱都吃不上了。
微信红包顺序拆分猜想
所以当我看见隔壁老王正在吃着热腾腾的包子加豆浆,只能默默端起了水杯去饮水机旁边打水喝,打算用水安抚我抗议的胃。
之后一边静静灌水喝,一边开始思索起来。为什么老王运气好,总是能够得到最佳手气。而我却总是几分几分,这不科学。难得微信红包有什么奥秘?难得拆分红包的先后顺序会影响最佳手气的概率?
于是本人赶紧上网搜了搜,原来早在微信红包出来的时候。就有人已经对于微信红包的随机分配算法进行探讨,并给出了相应回复。(看看大佬们都关注点总是和我们这些弱渣关注点不一样,(ˇˍˇ) 向大佬们低头。)
可是很块我就发现,这个仅供参考的代码就有一点问题。根据图中的代码
double min = 0.01;
double max = _leftMoneyPackage.remainMoney / _leftMoneyPackage.remainSize * 2;
通过知乎大神上面的提供的代码可以看出,微信发放的红包中。单个红包最小金额为0.01元,而最大金额则为 剩余的金额 / 剩余未拆开红包的数量 之后再乘以2
即我发一个5毛钱的红包,分5人发送。那么其中手气最佳的最大金额应该是 5 / 5 * 2 = 2毛。
对此我在微信群,发了一个5毛红包做了测试:
这里老王在专心吃的他的包子,因此没有去抢我发的红包。可是这样我还是一样拿不到手气最佳,心疼我这个手气......
嗯额,不扯远了。通过这个手气最佳的金额来看 0.34 > 0.5/5 * 2 ,因此从这个红包的金额来看,现在微信单个红包最大金额不满足知乎提供的公式。(在当时是不是满足,我就不清楚了,毕竟是好几年的公式了!)
但是后续在多个群里测试多个5毛红包之后,发现这个关于第一个领红包、以及最后一个领红包先后顺序领红包,获得手气最佳的概率是一样的。
只能说跟欧洲人和非洲人有关,看来这几天得多到老王的位置吸吸欧气 ( ̄_, ̄ )
其他的随机算法实现
在通过惨痛红包测试之后,证明现在当初那个公式可能有误。但是肿么不能这样就结束了,总得搞点事情出来呀!(于是乎,翻阅半天的帖子之后,便回到当初知乎题主提问的问题上,尝试解决他的问题。~(~ ̄▽ ̄)~)
解题:
尝试了一下,题主的问题。我好像能够解决呢!!
说实话,还是觉得题主的这个随机分配想法还是很妙的,要是我就想不出来这种随机分配金额的办法来。也要向提问题主低头(*  ̄︿ ̄)!
function weixin1(money, num) {
var arr1 = [];
var price = 0;
var ha = 0;
var random = 0;
for(var i = 0; i < num; i++) {
if(i == num - 1) {
arr1[i] = parseFloat(money.toFixed(2));
break;
}
arr1[i] = parseInt(parseInt(money / (num - i) * 100) / 100 * (parseInt(Math.random() * 100) / 100) * 100) / 100;
if(!arr1[i]){
arr1[i] = 0.01;
}
money -= arr1[i];
console.log(money);
}
for(var i = 0; i < arr1.length; i++) { //用来检测最后的总数是否正确
price += arr1[i];
}
function randomsort(a, b) {
return Math.random() > 0.5 ? -1 : 1;
}
arr1.sort(randomsort); //数组重新随机排列
console.log(arr1)
console.log(price);
}
weixin1(100, 5);
weixin1(0.5, 5);
以上就是对微信红包随机分配猜想的胡扯篇,欢迎各位大佬们指导并给出相应的意见。(当然红包打赏我就更好了( ̄︶ ̄),哎呦!我又想起了我那么多可怜测试红包。)