扫雷群规则资讯

扫雷群二维码拼手气红包底层逻辑猜想红包网

发布人:147小编 来源:微信抢红包群,支付宝红包群,红包群,红包扫雷群发布时间:2022-08-11 07:53:51 热度:

第一次猜想:

比如说10个人抢红包 第一个人抢的时候将总共的数量分成10份 每一份都是随机分派的钱数 第二个人抢的时候 就是将剩下的钱分成9份 每一份的钱数也是随机的 然后抢里面的一份 其后同理。

2022-1-20添加做法:

步骤1:首先将发红包金额进行0.01元的步长来进行拆分份数。

步骤2:第一个人抢的时候讲分好的份数中从一到这个份数(再减去还剩余的人数——如果不减的话就有可能出现发着发着没钱了)进行随机数生成然后再除以100即可得到当前人抢到的红包数金额,然后将份数进行更新,以此类推,到最后一个的时候直接拿还剩余的份数除以100当做他抢到的红包数即可。

一位热心网友给了一个思路 : 就是在抢之前 已经分好了10份 金额 随机分配 然后随机抢

程序如下 :

(额..............写了发现都是坑 暂时还没有 候补 ! ! )

2022-1-20候补程序

/**** @param nums 红包总钱数(小数点儿后两位)* @param pnum 抢红包人数*/publicstaticvoidhongbao(doublenums,intpnum){//红包总数可细分为的份数BigDecimalb=newBigDecimal(nums);nums=b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();System.out.println("红包总数:"+nums+"元");doublefen=(nums/0.01);intfeni=(int)fen;Randomrand=newRandom();//红包总数现在红包总数intfenshun=feni;for(inti=1;i<=pnum;i++){if(i==pnum){System.out.println("第"+i+"个抽红包的人获得:"+(double)fenshun/100+"元");}else{intsui=rand.nextInt(fenshun-(pnum-i))+1;System.out.println("第"+i+"个抽红包的人获得:"+(double)sui/100+"元");fenshun=fenshun-sui;}}}

运行结果:

红包总数22.5元第1个抽红包的人获得9.85元第2个抽红包的人获得0.43元第3个抽红包的人获得3.95元第4个抽红包的人获得6.57元第5个抽红包的人获得1.17元第6个抽红包的人获得0.43元第7个抽红包的人获得0.01元第8个抽红包的人获得0.07元第9个抽红包的人获得0.01元第10个抽红包的人获得0.01元

但是模拟100次结果显示很不平均 前面几个人几乎占据了所有的钱,后面几个人就几块钱。说明此逻辑和做法是有问题的。

然后又想了一种解决方法就是将上面说到的 按照0.01的步长将红包总金额分成若干份,然后将分成的份数再分成若干个区间,比如四个区间,每个区间中的数字不同例如 [1,100],[101,200],[201,300] 这样 ,然后用户抢红包的时候,先随机一个数字确定区间,然后再从区间中随机一个数当成自己抢到的份数,然后再除以100即得到抢到红包的金额数,(但是呢,我想了想跟上一种方法好像没有什么本质上的不同,所以就放弃了。。。。。。。。。。。。)

然后我又突然间想到一种看似无懈可击的方法如下:

就是说将抢红包的用户都先再一个确定的区间中随机一个数,任意的数。然后再将他们随机的数全部加起来当做分母,他们每个人随机的数当做分子,然后形成人数相同的若干个分数,将分数乘以红包总金额,即可得到每个用户所抢到的红包金额。我觉得这种方法,它没有先后顺序,后面的用户抢红包的时候,总量也没有发生变化。我觉得相对较为公平,又不失拼手气的意义。

以上逻辑的实现代码如下:

/**** @param nums 红包总钱数(小数点儿后两位)* @param pnum 抢红包人数*/publicstaticvoidhongbao3(doublenums,intpnum){intnum=0;int[]arr=newint[pnum];Randomrand=newRandom();for(inti=1;i<=pnum;i++){intsui=rand.nextInt(10)+1;num+=sui;arr[i-1]=sui;}for(intj=0;j<arr.length;j++){System.out.println("第"+(j+1)+"个用户抽到的钱:"+(double)nums/num*arr[j]);}}

运行结果:

第1个用户抽到的钱2.142857142857143第2个用户抽到的钱1.0714285714285714第3个用户抽到的钱5.357142857142857第4个用户抽到的钱0.5357142857142857第5个用户抽到的钱1.6071428571428572第6个用户抽到的钱3.75第7个用户抽到的钱2.6785714285714284第8个用户抽到的钱3.2142857142857144第9个用户抽到的钱1.6071428571428572第10个用户抽到的钱0.5357142857142857

咱就先抛开小数精度问题来看每个用户 抢到的 钱的数量,是不是较为公平。

但是这其中的随机数范围的界定还是值得推敲一下的,虽说都会相加形成一个分数的分母但是如果范围界定的太大的话容易造成极端的小,比如a用户抽到1 b用户抽到 999 , c用户抽到 8888,d用户抽打555,那a用户的钱数就会非常非常小甚至极端情况下会无限趋近于0,我现在程序中界定的范围是 1~10, 当然 1~100也是可以的,我觉得这个范围应该跟抢红包的用户的数量来动态变化,有个常量值来控制它变化的比例,但是我暂时还没有测出来这个值应该如何设置。

... 
上一篇 : 扫雷群拼手气红包的作用为何如此巨大?抢红包群
下一篇 : 微信群抢红包拼手气?别以为我不知道支付宝红包
猜你喜欢的微信抢红包群,支付宝红包群,红包群,红包扫雷群