当我们在群里抢红包时真的是手速越快红包金额越大吗?

当我们在群里抢红包时真的是手速越快红包金额越大吗?

答案当然是并不是,都说了是拼手气,岂能是拼手速!

不过也可以有拼手速的方法

二倍均值法(公平版)

这是一种很合理很公平的抢红包算法了,绝对不会让你拼手速的,就别天真了。

在此我们假设

红包剩余金额为 M

红包剩余数量为 N

这种算法就是每次都在区间[0,M/N×2] 随机取一个数

假设100元红包发10个人,那么合理的做法应该是每个人领到10元的概率相同。

第一个人随机金额的范围为[0,100/10×2] ,也就是[0,20],这样平均可以领到10元,此时剩余金额为100-10=90。

第二个人随机金额的范围为[0,90/9×2] ,也就是[0,20],这样平均也可以领到10元,此时剩余金额为90-10=80。

第三个人随机金额的范围为[0,80/8×2] ,也就是[0,20],这样平均也可以领到10元。

这样推导下去,每个人领到相同金额的概率应该就是相同的了。

代码:

public static List doubleMeanMethod(double money,int number){

List result = new ArrayList();

if(money<0&&number<1)

return null;

double amount,sum=0;

int remainingNumber=number;

int i=1;

while(remainingNumber>1){

amount= nextDouble(0.01,2*(money/remainingNumber));

sum+=amount;

System.out.println("第"+i+"个人领取的红包金额为:"+format(amount));

money -= amount;

remainingNumber--;

result.add(amount);

i++;

}

result.add(money);

System.out.println("第"+i+"个人领取的红包金额为:"+format(money));

sum+=money;

System.out.println("验证发出的红包总金额为:"+format(sum));

return result;

}

运行结果:

线段切割法(手速版)

这就是拼手速了,是时候展示手速了。

这个算法可以把总金额想象成一条线段,每个人都有机会切一刀,前面的人切剩下的后面的人再接着切,这样越是前面的人截取的长度(理解成领取到的红包金额)越大的概率就越大。

代码:

public static void lineSegmentCutting(double money,int number){

if(money<0&&number<1)

System.out.println("输入错误!");

double begin=0,end=money;

double y=0;

for(int i=0;i

double nn=0;

double amount=nextDouble(begin,end);

nn=amount-begin; System.out.println("第"+(i+1)+"个人领取的红包金额为:"+format(nn)); y+=nn; begin=amount;}System.out.println("第"+number+"个人领取的红包金额为:"+format(end-begin));y+=(end-begin);System.out.println("验证发出的红包总金额为:"+format(y));

}

运行结果:

java实现qq抢红包_Java实现抢红包算法,附完整代码(公平版和手速版)相关推荐

  1. java实现红包要多少钱_Java实现抢红包算法,附完整代码(公平版和手速版)

    当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) 这是一种很合理很公平的抢红包算法了,绝对不会让你拼 ...

  2. java 实现秒抢_Java实现抢红包算法,附完整代码(公平版和手速版)

    当我们在群里抢红包时真的是手速越快红包金额越大吗? 当我们在群里抢红包时真的是手速越快红包金额越大吗? 答案当然是并不是,都说了是拼手气,岂能是拼手速! 不过也可以有拼手速的方法 二倍均值法(公平版) ...

  3. Java发送QQ邮件问题Could not connect to SMTP host: smtp.qq.com, port: 465(内附完整代码)

    邮件发送失败,本地测试可以,部署到服务器就不行. 之前就碰到这个问题,解决办法就是把port端口改成587,然后注释这一段 MailSSLSocketFactory sf = new MailSSLS ...

  4. JAVA:实现binary exponentiation二进制幂运算算法(附完整源码)

    JAVA:实现binary exponentiation二进制幂运算算法 package com.thealgorithms.divideandconquer;public class BinaryE ...

  5. JAVA:实现Juggler Sequence杂耍者序列算法(附完整源码)

    JAVA:实现Juggler Sequence杂耍者序列算法 package com.thealgorithms.maths;import java.util.ArrayList; import ja ...

  6. JAVA:实现买入和卖出股票的最佳时机算法(附完整源码)

    JAVA:实现买入和卖出股票的最佳时机算法 public class BestTimeToBuyAndSellStock {public int maxProfit(int[] prices) {// ...

  7. java登录注册抽奖完整代码_Java抽奖系统(附完整代码)

    完整代码import java.util.Scanner;import java.util.ArrayList;import java.io.*;import java.util.StringToke ...

  8. C++ 实现无向图的最小生成树Prim算法(附完整代码)

    实现Prim算法,需设置两个辅助一维数组lowcost和closevertex. 其中lowcost用来保存集合V-U中各顶点与集合U中各顶点构成的边中具有最小权值的边的权值: 数组closevert ...

  9. java五子棋游戏源代码_Java实现五子棋游戏的完整代码

    用Java编写简单的五子棋,供大家参考,具体内容如下 前言 这两天在空闲时间做了个五子棋项目,分享给大家看一下,界面是这样的: 界面很丑我知道,本人虽有几年PS基础,但知识浅薄,审美观不尽人意,做到如 ...

最新文章

  1. 剑指offer java 博客_Java--剑指offer(10)
  2. E - Escape from the Island(最短路+dp)
  3. wxpython 调用子窗口_wxpython入门第一步(简单例子)
  4. 湛江市计算机等级考试,2020广东省湛江市计算机等级考试注意事项
  5. PyTorch 1.0 中文文档:序列化的相关语义
  6. gc:C语言的垃圾回收库-中文
  7. 8192 oracle,ORA-39095: 转储文件空间已耗尽: 无法分配 8192 字节
  8. 写一个自己的javascript库
  9. typora 免费版, 最后一个beta版本下载
  10. PHP手机号截取前三位后四位
  11. html中hover的作用,hover在css中的用法
  12. 虚拟机macos系统共享文件
  13. HTML+JavaScript简单搜索功能实现
  14. html制作国字布局,各种经典布局--“国”字布局
  15. 微信小程序getPhoneNumber获取手机号,解决code失效问题
  16. 你认识5G物联网关键器件FBG吗
  17. qt :C4819 著名错误
  18. Ball in Berland
  19. Cisco、华为、H3C交换机配置文件自动备份
  20. 18.03.21 继承作业

热门文章

  1. Tagging Testing for Android, iOS and Web
  2. 如何获得高质量的扫描图像
  3. 多功能平均电流型 LED 恒流驱动器Hi7010
  4. 短视频app源码开发,音视频混合的实现
  5. 复旦大学计算机技术参考书,2021复旦大学计算机科学与技术考研真题经验参考书...
  6. 智慧物流打造海尔集团核心竞争力
  7. SQL简单的查询语句之模糊查询
  8. 青岛市中小学学籍系统服务器,重庆市中小学学籍管理系统:http://222.177.23.154
  9. basler运用pylon开发步骤
  10. linux gbk英文转unicode,GBK编码转Unicode编码转换表