微信红包算法TEST
1、基本算法
设定总金额为10元,有N个人随机领取:
N=1
则红包金额=X元;
N=2
为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数
第二个红包=10-第一个红包金额;
N=3
红包1=0.01至0.98之间的某个随机数
红包2=0.01至(10-红包1-0.01)的某个随机数
红包3=10-红包1-红包2
……
2、java代码
package Demo_1.Test_1; import java.math.BigDecimal;
import java.util.Random; /**
* @描述:微信红包算法TEST
* @author BrokenColor
* @date 2017年3月2日上午11:27:36
*/
public class WeixinHB { double TOTAL = 10;//红包总金额
int NUM = 8;//抢红包人数
double MIN = 0.01;//每人最少分的金额
double safe_total ;
double money ;
Random rand = new Random();
public void calculation(){
for (int i = 1; i < NUM; i++) { safe_total = (TOTAL-(NUM-i)*MIN)/(NUM-i);//计算安全上限 money = rand.nextDouble()*(safe_total-MIN)+MIN; money =(double)Math.round(money*100)/100;//保留两位小数 //直接相减会有double数据类型相减的问题
TOTAL = this.sub(TOTAL, money); System.out.println("第"+i+"次红包:"+money+"元,剩余:"+TOTAL+"元");
}
System.out.println("第"+NUM+"次红包:"+TOTAL+"元,剩余:0元");
}
//double 数相减
public double sub(double d1,double d2){
BigDecimal bd1 = new BigDecimal(Double.toString(d1));
BigDecimal bd2 = new BigDecimal(Double.toString(d2));
return bd1.subtract(bd2).doubleValue();
} public static void main(String[] args) {
// TODO Auto-generated method stub
WeixinHB hb = new WeixinHB();
hb.calculation();
} }
结果:
第1次红包:1.38元,剩余:8.62元
第2次红包:1.11元,剩余:7.51元
第3次红包:1.14元,剩余:6.37元
第4次红包:0.31元,剩余:6.06元
第5次红包:1.52元,剩余:4.54元
第6次红包:0.93元,剩余:3.61元
第7次红包:2.34元,剩余:1.27元
第8次红包:1.27元,剩余:0元
如有错误,望指出!
微信红包算法TEST的更多相关文章
- php微信红包算法
微信红包算法.php /**生成红包的函数*/ function getRandMoney($totalMoney, $totalPeople=2, $miniMoney=1){ $randRemai ...
- PHP实现简易微信红包算法
<?php /** * PHP实现简易的微信红包算法 * @version v1.0 * @author quetiezheng */ function getMoney($total, $pe ...
- Python微信红包算法
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- PHP实现微信红包算法和微信红包的架构设计简介
微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...
- java 微信红包算法代码实现及架构设计
转载至:https://www.zybuluo.com/yulin718/note/93148 微信红包的架构设计简介 架构 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈 ...
- c# Java 微信红包算法
int total_money_cent = 1000; // 红包总金额 单位:分 int total_people = 8; // 抢红包总人数 int[] array = new int[tot ...
- 微信红包中使用的技术:AA收款+随机算法
除夕夜你领到红包了吗?有的说“我领了好几K!”“我领了几W!” 土豪何其多,苦逼也不少!有的说“我出来工作了,没压岁钱了,还要发红包”.那您有去抢微信红包吗?微信群中抢“新年红包”春节爆红.618微信 ...
- PHP实现微信随机红包算法和微信红包的架构设计简介
微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...
- PHP用抛物线的模型实现微信红包生成算法的程序源码
<?php /* *Author:Kermit *Time:2015-8-26 *Note:红包生成随机算法 */ header("Content-type:text/html;cha ...
随机推荐
- 20145329 《Java程序设计》第五周学习总结
20145329 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 Java异常处理是要处理Exception类及其子类(Checked Exception),RuntimeE ...
- nsis源码 nsisdialogdesigner
; 安装程序初始定义常量!define PRODUCT_NAME "nsisdialogdesigner"!define PRODUCT_VERSION "1.1.3&q ...
- Show Desktop Pro FAQ
Q. Will the desktop background image be restored after quit? A: Yes. Right now, "Hide icons&quo ...
- python的socket的tcp协议编程
服务端代码如下: # _*_ coding:utf-8 _*_import socketimport datetimeHOST='0.0.0.0'PORT=3434 s=socket.socket(s ...
- <The old man and the sea>
Every day is a new day. It is better to be lucky. But i would rather be exact. Then when luck comes ...
- asp.net core 发布 不打包cshtml 文件
需要在 FolderProfile.pubxml 文件中添加 FolderProfile.pubxml <MvcRazorCompileOnPublish>false</MvcRaz ...
- LDA学习之beta分布和Dirichlet分布
---恢复内容开始--- 今天学习LDA主题模型,看到Beta分布和Dirichlet分布一脸的茫然,这俩玩意怎么来的,再网上查阅了很多资料,当做读书笔记记下来: 先来几个名词: 共轭先验: 在贝叶斯 ...
- [WCF安全3]使用wsHttpBinding构建基于SSL与UserName授权的WCF应用程序
上一篇文章中介绍了如何使用wsHttpBinding构建UserName授权的WCF应用程序,本文将为您介绍如何使用wsHttpBinding构建基于SSL的UserName安全授权的WCF应用程序. ...
- nodejs 备忘
引入模块(在于你用什么模块,需要的模块可以用终端进行安装, npm,一般express,swig,body-parser,cookies,markdown) 设置模块 设置渲染 var express ...
- Sql索引
1.为什么要给表加上主键?建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行. 一个没加主键的表,并不能被称之为「表」.一个没加主键的表,它的数据无序 ...