java Random 抢红包算法
红包有一个总金额和总数量,领的时候随机分配金额。
维护一个剩余总金额和总数量,分配时,如果数量等于1,直接返回总金额,如果大于1,则计算平均值,并设定随机最大值为平均值的两倍,然后取一个随机值,如果随机值小于0.01,则为0.01,这个随机值就是下一个的红包金额。
/**
* Created by xc on 2019/11/25
* 抢红包算法
*/
public class RandomRedPacket { private int leftMoney;
private int leftNum;
private Random rnd; public RandomRedPacket(int total, int num) {
this.leftMoney = total;
this.leftNum = num;
this.rnd = new Random();
} public synchronized int nextMoney() {
if (this.leftNum <= 0) {
throw new IllegalStateException("抢光了");
}
if (this.leftNum == 1) {
return this.leftMoney;
}
double max = this.leftMoney / this.leftNum * 2d;
int money = (int) (rnd.nextDouble() * max);
money = Math.max(1, money);
this.leftMoney -= money;
this.leftNum--;
return money;
} }
如果是这个算法,那先抢好,还是后抢好呢?先抢肯定抢不到特别大的,不过,后抢也不一定会,这要看前面抢的金额,剩下的多就有可能抢到大的,剩下的少就不可能有大的。
java Random 抢红包算法的更多相关文章
- java:高速排序算法与冒泡排序算法
Java:高速排序算法与冒泡算法 首先看下,冒泡排序算法与高速排序算法的效率: 例如以下的是main方法: /** * * @Description: * @author:cuiyaon ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- Java各种排序算法
Java各种排序算法详解 排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序. 内排序有 ...
- Java数据结构和算法(一)散列表
Java数据结构和算法(一)散列表 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 散列表(Hash table) 也叫哈希表 ...
- java Random类详解
java Random类位于java.util包下,主要用来生成随机数,本文详解介绍了Random类的用法,希望能帮到大家 Random类 (java.util) Random类中实现的随机算法是伪随 ...
- Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法
Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
- Java 常用排序算法/程序员必须掌握的 8大排序算法
Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...
- Java实现KMP算法
/** * Java实现KMP算法 * * 思想:每当一趟匹配过程中出现字符比较不等,不需要回溯i指针, * 而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远 * 的一段 ...
随机推荐
- php中的闭包类
看注释 <?php //闭包类实现匿名函数 //call方法调用 class Customer { private $firstname; private $lastname; public f ...
- PHP写一个最简单的MVC框架
照网上看的.Framework.class.php文件是灵魂. <?php class Framework { public static function run() { //echo &qu ...
- ffmpeg的源码调试
转自:windows下使用Visual Studio编译可以调试的FFmpeg 2017年01月05日 13:33:39 阅读数:3654 因本人主要在windows环境下开发,Linux下的gpb调 ...
- 项目Beta冲刺(团队)——05.24(2/7)
项目Beta冲刺(团队)--05.24(2/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第2 ...
- python应用-综合应用题解决
题目: A,B,C,D,E五个人捕鱼,不计其数,然后休息, 早上A第一个醒来,将鱼均分成五份,把多余的一条鱼扔掉,拿走自己的一份, B第二个醒来,也将鱼均分为五份,把多余的一条鱼扔掉,拿走自己的一份. ...
- 不能走路(walk)
[题目背景] 小G 同学总是在树上走路.小S 看不下去了,决定阻止小G 同学. [题目描述] 有一棵 n 个点的树,树上有 m 条路径,每条路径为 x[i]到y[i] 的树上最短路径(不经过相同的边) ...
- 32、MySQL简介
一.MySQL简介 1.数据库管理软件分类 主要分为关系型和非关系型. 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构. 关系型:如sqllite,d ...
- woocommerce模板制作简易教程
woocommerce是wordpress里比较好用的电商解决方案,但是制作woocommerce模板相对比较复杂,如果想用woocommerce来建一个展示型的网站,不带下单功能,我们可以很快就能把 ...
- ssh ssm ssi 服务器平台架构
1.spring + springmvc + mybatis 使用maven构建,数据库是oracle,主要是温习mybatis配置以及与spring集成.这种框架目前是使用最广泛的,这里就不多说 2 ...
- (14)树莓派 - 修改pi账号密码,开启root账号
https://blog.csdn.net/yoie01/article/details/45115067 1.修改PI账号的密码 password pi 2.开启root账号树莓派使用的linux是 ...