浅谈最近的扣扣、微信抢红包背后的故事
2015-02-15 19:10
225 查看
今天在微信公众号“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;
}
}
首当其冲的我必须先说下此次抢红包背后算法中用到的 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;
}
}
相关文章推荐
- 浅谈微信红包摇一摇的技术实现
- 微信群九大规律 - 47万微信群和2亿微信用户背后的故事
- 红包流行乞讨!微信谈钱伤感情的背后
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
- 微信朋友圈:应对春节千亿访问量背后的故事
- 22人15天研发 微信红包系统发起“珍珠港偷袭”的背后
- 浅谈微信红包的算法
- 扫福得福背后,支付宝AR红包的技术创新与故事
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
- 微信“15。。。。。”背后的故事
- 微信拼手气红包背后的算法逻辑
- 微信红包店小程序开发过程中遇到的问题 php获取附近周边商家 显示最近商家
- 微信红包,颠覆传统背后的布局
- 微信“跳一跳”提示音怎么来的?背后竟有这些故事!
- 微信朋友圈:应对春节千亿访问量背后的故事
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑
- 高并发资金交易系统设计方案—百亿双十一、微信红包背后的技术架构
- 微信高并发资金交易系统设计方案——百亿红包背后的技术支撑(转)