JAVA版的微信紅包算法


比如發一個總額為50元的紅包,總共分5個:
第一個:在0~10元之間隨機產生一個數,作為這一個紅包的錢數,設為x1:
第二個:剩下的錢為(50-x1),然后在0~(50-x1)/(5-1)隨機一個數,作為這份的錢數,設x2
。。。
第5份:剩下的錢為(50-x1-x2-...x4),系統由0~(50-x1-x2-...-xn-1)/(5-4)隨機一個數,作為這個份的錢數,設為xn

首先定義一個紅包類:

<span style="font-family:SimSun;font-size:18px;">public class Money {
// remainNum剩余的紅包數量
// remainMoney 剩余的錢
public static int remainNum;
public static double remainMoney;
}</span>

寫一個調用方法getRandomMoney,返回值類型為double,定義最小值和最大值,當紅包數量remainNum為1時,直接返回remainMoney,

<span style="font-family:SimSun;font-size:18px;">public static double getRandomMoney(Money myMoney) {
// remainSize 剩余的紅包數量
// remainMoney 剩余的錢
// 隨機,額度在0.01和(剩余平均值*2)之間
double min= 0.01;
double max= myMoney.remainMoney / myMoney.remainNum * 2;
if (myMoney.remainNum == 1) {
myMoney.remainNum--;
return (double) Math.round(myMoney.remainMoney * 100) / 100;
}
Random r= new Random();
double money = r.nextDouble() * max;
money = money <= min ? 0.01: money;
money = Math.floor(money * 100) / 100;
myMoney.remainNum--;
myMoney.remainMoney -= money;
return money;
}</span>

測試一下

<span style="font-family:SimSun;font-size:18px;">public static void main(String[] args) {
// TODO Auto-generated method stub
Money m=new Money();
m.remainNum=5;
int count=m.remainNum;
m.remainMoney=50;
for(int i=1;i<=count;i++){
System.out.println("第"+i+"次獲取的紅包為"+getRandomMoney(m)+"元");
}

}
</span>
結果:




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



Java 實現微信紅包分配算法 java實現微信紅包分配算法 c# Java 微信紅包算法 微信紅包算法java版本 微信紅包算法? [算法]微信紅包 微信紅包算法 微信紅包算法 微信紅包算法 微信紅包算法
 
粤ICP备14056181号  © 2014-2021 ITdaan.com