今天在微信公众号“Java那点事”里发现了这个算法,感觉挺有意思就拿来玩玩。
首当其冲的我必须先说下此次抢红包背后算法中用到的 mt_rand()函数的含义及用法:
语法:mt_rand(min,max)
说明:如果没有提供可选参数min 和max,mt_rand()返回0到rand_max之间的伪随机数,例如想要1到100(包括1和100)之间的随机数,用mt_rand(1,100).
好了,mt_rand()函数的含义和用法已经了解了,那就切入正题开始代码了。
double total=10000; //红包金额总数
int num=100; //红包总数
double money; //个人得到红包里的金额
double safe_total=50; //只要红包没抢完,每人至少可以获得的钱数
System.out.println("开始抢红包喽!");
for(int i=1;i<num;i++){
money=Math.random()*(total-(num-i)*safe_total)/(num-i)+safe_total;
total=total-money;
System.out.println("第"+i+"个人所抢到的红包钱为:"+money+" 剩余金额为:"+total);
if(total<=0){
System.out.println("红包已抢完,请等下次喽!");
break;
}
}