QQ红包随机数算法
来源:互联网 发布:在淘宝上开店货源怎么办 编辑:程序博客网 时间:2024/05/16 01:42
关于QQ红包随机生成,如何生成,什么时候抢红包比较划算。
比如QQ发一个拼手气红包,总金额为20元,7个人分。
当时简单想法是,随机出一个金额,下次总金额减去随机金额再进行随机。
但是最后金额可能会超出总金额,造成不够分的情况。
而加了很多限制条件也会造成红包看起来不是那么随机,
而是越往后面领取的红包越小。
- 下面代码的思路:
将每个红包设置一个期望值,期望值为红包的总金额/人数,
每个红包最大金额是:期望值的两倍 。
每个红包最小金额是:0.01 。
如此循环,前面的人如果抢到红包大于期望值,
在这后面抢红包的人期望值会变小。
随机出 “总人数 - 1“的红包数量,
剩下的所有金额则是最后一个红包。
package com.shine.main;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;import java.util.Random;public class RedPaper { static List<BigDecimal> redPaperList = new ArrayList<BigDecimal>(); public static void main(String[] args) { //红包总金额 double Money = 20; BigDecimal decimal = new BigDecimal(Money); BigDecimal redPageMoney = decimal.setScale(2,BigDecimal.ROUND_HALF_UP); //分红包人数 int redPaperNum = 7; BigDecimal sum = new BigDecimal(0); everyRedPaper(redPaperNum,redPageMoney); for (BigDecimal rpl : redPaperList) { System.out.println(rpl); sum = sum.add(rpl); } System.out.println(); System.out.println(sum.doubleValue()); } public static void everyRedPaper(int redPaperNum, BigDecimal redPageMoney){ Random random = new Random(); while (redPaperNum != 1) { //期望值 BigDecimal expectedValue = redPageMoney.divide(new BigDecimal(redPaperNum),7, BigDecimal.ROUND_HALF_EVEN); //最大值 BigDecimal maxMoney = expectedValue.multiply(new BigDecimal(2)); //最小值 BigDecimal decimal = new BigDecimal(0.01); BigDecimal minMoney = decimal.setScale(2,BigDecimal.ROUND_DOWN); //每个红包 BigDecimal everyRed = maxMoney.multiply(new BigDecimal(random.nextDouble())); BigDecimal everyRedPaper = everyRed.setScale(2,BigDecimal.ROUND_DOWN); if(everyRedPaper.compareTo(minMoney) == -1){ //保证最低有0.01元 everyRedPaper = minMoney; } redPageMoney = redPageMoney.subtract(everyRedPaper); redPaperNum --; redPaperList.add(everyRedPaper); } //最后的红包金额 redPaperList.add(redPageMoney); }}
什么时候抢红包
所以不难看出红包发出后第一个抢,是比较稳妥的做法,期望值平均。
而最后一个抢红包的则是比较有风险的,
假如前面的所有人都没有抢到大红包,则最后一个红包不用随机而且金额较大。
错误反馈
希望大家发现博客有错误和我提出,博主会第一时间更新文章.
谢谢.
本人邮箱:zhaitonghui.vip@foxmail.com
阅读全文
0 0
- QQ红包随机数算法
- 实时随机数算法(微信红包分配算法)
- QQ群红包的算法实现探讨(基于PHP demo)
- 红包算法
- 红包算法
- 红包算法
- 红包算法
- qq抢红包
- QQ 微信抢红包
- QQ抢红包插件
- qq微信红包抢红包神器
- 微信红包算法获取若干随机数总和为固定值
- QQ群红包的算法实现探讨(基于PHP demo)
- QQ群红包的算法实现探讨(基于PHP demo)
- QQ群红包的算法实现探讨(基于PHP demo)
- 超人抢QQ红包助手
- QQ抢红包插件实现
- 微信,QQ 抢红包
- 最大似然估计和贝叶斯估计区别
- spring mvc mongodb web项目jar
- Java中的线程Thread方法之---interrupt()
- 解题常用工具
- 查询每个班成绩排名前三的学生信息
- QQ红包随机数算法
- Linux(CentOS)下设置nginx开机自动启动和chkconfig管理
- select for update
- Linux+Apache+Mysql+PHP优化技巧
- 页面表格
- (41)异常编程练习:①搜索一个字符数组中是否存在某个字符②判断哪个圆半径大,返回值是圆
- USACO-Section1.5 sprime[深搜]
- css3 pipe
- Mysql学习历程(16)-数据备份与还原