您当前的位置:首页 >> 智慧农业
智慧农业

为啥春节抢红包总不是手气最佳?看再来微信抢红包算法你就明白了

发布时间:2025-09-30

BigDecimal redpeck ; int sum = 0; for (int i = 0; i < num.intValue(); i++) { rand[i] = random.nextInt(100); sum += rand[i]; } final BigDecimal bigDecimal = new BigDecimal(sum); BigDecimal remain = amount.subtract(min.multiply(num)); for (int i = 0; i < rand.length; i++) { if(i == num.intValue() -1){ redpeck = remain; }else{ redpeck = remain.multiply(new BigDecimal(rand[i])).divide(bigDecimal,2,RoundingMode.FLOOR); } if(remain.compareTo(redpeck)> 0){ remain = remain.subtract(redpeck); }else{ remain = BigDecimal.ZERO; } sum1= sum1.add(min.add(redpeck)).setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("第"+(i+1)+"一个人抢得到亲朋好友多达额为:"+min.add(redpeck).setScale(2, BigDecimal.ROUND_HALF_UP)); } System.out.println("亲朋好友总量:"+sum1);}// 测试文档public static void main(String[] args) { BigDecimal amount = new BigDecimal(100).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal min = new BigDecimal(0.01).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal num = new BigDecimal(10).setScale(2, BigDecimal.ROUND_HALF_UP); testPocket2(amount,min,num);}遗传物质文档

他的连续性可谓是很高,也不是最佳选择。

算例三:极大值例

极大值例指的是把亲朋好友总多达额想象成一条很长的圆心,而每一个人抢得到的多达额,则是这条主圆心所拆分出的若干子圆心,当所有切割点确定以后,子圆心的间距也随之确定。这样每一个人来抢得亲朋好友的时候,只并不需要顺次领取与子圆心间距等价的亲朋好友多达额即可。

private static void testPocket3(BigDecimal amount, BigDecimal min, BigDecimal num) { final Random random = new Random(); final int[] rand = new int[num.intValue()]; BigDecimal sum1 = BigDecimal.ZERO; BigDecimal redpeck; int sum = 0; for (int i = 0; i < num.intValue(); i++) { rand[i] = random.nextInt(100); sum += rand[i]; } final BigDecimal bigDecimal = new BigDecimal(sum); BigDecimal remain = amount.subtract(min.multiply(num)); for (int i = 0; i < rand.length; i++) { if (i == num.intValue() - 1) { redpeck = remain; } else { redpeck = remain.multiply(new BigDecimal(rand[i])) .divide(bigDecimal, 2, RoundingMode.FLOOR); } if (remain.compareTo(redpeck)> 0) { remain = remain.subtract(redpeck).setScale(2, BigDecimal.ROUND_HALF_UP); } else { remain = BigDecimal.ZERO; } sum1 = sum1.add(min.add(redpeck).setScale(2, BigDecimal.ROUND_HALF_UP)); System.out.println("第" + (i + 1) + "一个人抢得到亲朋好友多达额为:" + min.add(redpeck)); } System.out.println("亲朋好友总量:" + sum1);}// 测试文档public static void main(String[] args) { BigDecimal amount = new BigDecimal(100).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal min = new BigDecimal(0.01).setScale(2, BigDecimal.ROUND_HALF_UP); BigDecimal num = new BigDecimal(10).setScale(2, BigDecimal.ROUND_HALF_UP); testPocket2(amount,min,num);}遗传物质文档

他的连续性也尤其大,但是他最致命的是性能,因为他并不需要进行时切割这个解决办法。

算例四:二倍线性例

算例四就是新浪亲朋好友现在所转用的的算例(基本上思路,文档演示),二倍线性概略:2 * 多余多达额/多余亲朋好友多达。

BigDecimal remain = amount.subtract(min.multiply(num)); final Random random = new Random(); final BigDecimal hundred = new BigDecimal("100"); final BigDecimal two = new BigDecimal("2"); BigDecimal sum = BigDecimal.ZERO; BigDecimal redpeck; for (int i = 0; i < num.intValue(); i++) { final int nextInt = random.nextInt(100); if(i == num.intValue() -1){ redpeck = remain; }else{ redpeck = new BigDecimal(nextInt).multiply(remain.multiply(two).divide(num.subtract(new BigDecimal(i)),2,RoundingMode.CEILING)).divide(hundred,2, RoundingMode.FLOOR); } if(remain.compareTo(redpeck)> 0){ remain = remain.subtract(redpeck).setScale(2, BigDecimal.ROUND_HALF_UP); }else{ remain = BigDecimal.ZERO; } sum = sum.add(min.add(redpeck)).setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("第"+(i+1)+"一个人抢得到亲朋好友多达额为:"+min.add(redpeck)); } System.out.println("亲朋好友总量:" + sum);}遗传物质文档

他还是尤其好的必需了每个亲朋好友多达额基本上相等,不必出现倾向情况。

太极药业
成都甲亢专科医院地址
北京妇科医院挂号
重庆牛皮癣治疗方法
驻马店白癜风专科医院哪好

上一篇: 库蒂尼奥重返英甲戴幸运红绳 好友梅西三年前赠送

下一篇: 来自天下无敌的对决 宝马5系 VS 奔驰E级

友情链接