微信随机生成红包金额算法java版
最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发。
publicclassWxAlgorithm{
/**
*@parammoneySum输入总金额
*@paramredNum输入红包数量
*/
privatestaticvoidwxAlgorithm(doublemoneySum,intredNum){
//设置最小的金额
doublemoneyMin=0.01;
Randomrandom=newRandom();
//精确小数点2位
NumberFormatformatter=newDecimalFormat("#.##");
for(inti=1;i<redNum;i++)
{
//随机一个数,数值范围在最小值与余额之间
Stringmoney=formatter.format(random.nextDouble()*(moneySum-moneyMin)+moneyMin);
//数值转换
moneySum=Double.valueOf(formatter.format(moneySum-Double.valueOf(money)));
System.out.println("第"+i+"个红包:"+money+"元,余额:"+moneySum);
}
System.out.println("最后个红包:"+moneySum+"元,余额:"+(moneySum-moneySum));
}
publicstaticvoidmain(String[]args){
wxAlgorithm(10.26,9);
}
}
后来又在网上搜集了一些微信随机生成红包算法,供大家参考。
publicstaticdouble[]getMoney(doublemoney,intnum){
Randomr=newRandom();
DecimalFormatformat=newDecimalFormat(".##");
doublemiddle=Double.parseDouble(format.format(money/num));
double[]dou=newdouble[num];
doubleredMoney=0;
doublenextMoney=money;
doublesum=0;
intindex=0;
for(inti=num;i>0;i--){
if(i==1){
dou[index]=nextMoney;
}else{
while(true){
Stringstr=format.format(r.nextDouble()*nextMoney);
redMoney=Double.parseDouble(str);
if(redMoney>0&&redMoney<middle){
break;
}
}
nextMoney=Double.parseDouble(format.format(nextMoney-redMoney));
sum=sum+redMoney;
dou[index]=redMoney;
middle=Double.parseDouble(format.format(nextMoney/(i-1)));
index++;
}
}
returndou;
}
这里一个基本思路是这样的:首先算出红包的平均值,再通过一个随机红包数小于这个平均值的红包,当该红包发完后,红包总金额需要相应减少,同时重新计算这个平均值:新的总金额%(原总红包数-1),直到最后一个红包时,把所有的剩余金额塞进去。
还有许多精彩源码分享:java简单的抢红包的随机分配红包算法实现源码。
packagecom.sunron.test;
importjava.math.BigDecimal;
importorg.junit.Test;
publicclassHongBao{
@Test
publicvoidtestHonbao(){
hb(100,9,0.01);//金额,个数,最少值
//zb();
}
voidhb(doubletotal,intnum,doublemin){
for(inti=1;i<num;i++){
doublesafe_total=(total-(num-i)*min)/(num-i);
doublemoney=Math.random()*(safe_total-min)+min;
BigDecimalmoney_bd=newBigDecimal(money);
money=money_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
total=total-money;
BigDecimaltotal_bd=newBigDecimal(total);
total=total_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("第"+i+"个红包:"+money+",余额为:"+total+"元");
}
System.out.println("第"+num+"个红包:"+total+",余额为:0元");
}
voidzb(){
for(inta=0;a<=10000;a++){
if(a%1000==0)
System.out.println(a);
}
}
}
别人在抢红包,我们就来研究研究随机发红包的算法:
publicstaticvoidmain(String[]args){
//红包数
intnumber=10;
//红包总额
floattotal=100;
floatmoney;
//最小红包
doublemin=1;
doublemax;
inti=1;
Listmath=newArrayList();
DecimalFormatdf=newDecimalFormat("###.##");
while(i<number){
//保证即使一个红包是最大的了,后面剩下的红包,每个红包也不会小于最小值
max=total-min*(number-i);
intk=(int)(number-i)/2;
//保证最后两个人拿的红包不超出剩余红包
if(number-i<=2){
k=number-i;
}
//最大的红包限定的平均线上下
max=max/k;
//保证每个红包大于最小值,又不会大于最大值
money=(int)(min*100+Math.random()*(max*100-min*100+1));
money=(float)money/100;
//保留两位小数
money=Float.parseFloat(df.format(money));
total=(int)(total*100-money*100);
total=total/100;
math.add(money);
System.out.println("第"+i+"个人拿到"+money+"剩下"+total);
i++;
//最后一个人拿走剩下的红包
if(i==number){
math.add(total);
System.out.println("第"+i+"个人拿到"+total+"剩下0");
}
}
//取数组中最大的一个值的索引
System.out.println("本轮发红包中第"+(math.indexOf(Collections.max(math))+1)+"个人手气最佳");
}
更多精彩内容请点击《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。
以上就是为大家分享的多种微信随机生成红包算法,为大家提供了多种思路,希望对大家学习使用微信随机生成红包算法有所帮助,也希望大家继续关注毛票票的更多精彩内容。