拼手气积分红包算法,借鉴了网上的微信红包算法。不过积分的最小单位是1,所以进行了相关的修改操作。
import java.time.LocalDateTime;
/**
* @author yangyun
* @title
* @Package com.zeekrlife.micro.mpintegral.utils
* @date 2021/8/16 4:16 下午
*/
public class RedPacketsTest {
public static int getRandomMoney(RedPackage _redPackage) {
if (_redPackage.remainSize == 1) {
_redPackage.remainSize--;
return _redPackage.remainMoney;
}
int min = 1;
int max = _redPackage.remainMoney / _redPackage.remainSize * 2;
double money = Math.random() * max;
money = money <= min ? 1 : money;
money = Math.floor(money);
_redPackage.remainSize--;
_redPackage.remainMoney -= money;
return (int) money;
}
public static void main(String[] args) {
System.out.println(LocalDateTime.now());
for (int i = 0; i < 10000; i++) {
RedPackage moneyPackage = new RedPackage();
moneyPackage.remainMoney = 1000;
moneyPackage.remainSize = 20;
while (moneyPackage.remainSize != 0) {
System.out.print(getRandomMoney(moneyPackage) + " ");
//getRandomMoney(moneyPackage);
}
System.out.println();
}
System.out.println(LocalDateTime.now());
}
static class RedPackage {
// 剩余红包的数量
int remainSize;
// 剩余的积分
int remainMoney;
}
}