微信随机生成红包金额算法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微信开发教程汇总》欢迎大家学习阅读。
以上就是为大家分享的多种微信随机生成红包算法,为大家提供了多种思路,希望对大家学习使用微信随机生成红包算法有所帮助,也希望大家继续关注毛票票的更多精彩内容。