微信红包算法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 ...
随机推荐
- Java-性能调优实战(jps、jstack)
找最耗CPU的线程 1. 找出java进程 [ ~]# jps 9939 Resin 9874 WatchdogManager 9926 Jps 2. 找java进程下所有的线程 [ ~]# top ...
- 20145302张薇《Java程序设计》第七周学习总结
20145302 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间的度量 Greenwich Mean Time,格林威治时间,简称GMT时间,由观察太阳而得来: Un ...
- 20145331 实验一 "Java开发环境的熟悉"
20145331 实验一 "Java开发环境的熟悉" 实验内容 使用JDK和IDE编译.运行简单的Java程序.题目: 实现四则运算,并进行测试. 编写代码 1.首先第一步就是要输 ...
- Kali视频学习6-10
Kali视频学习6-10 kali信息收集之主机探测 主机探测指识别目标机器是否可用(简单来说是否在线),在探测过程中,需要得到目标是否online等信息.由于IDS和(入侵检测系统)和IPS(入侵保 ...
- #ifndef用法
用于避免重复包含头文件 #ifndef _STDIO_H_ #define _STDIO_H_ ...... #endif
- GCC精彩之旅
在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是如何灵活运用C编译器.目前Linux下最常用的C语言编译器是GCC(GNU Compile ...
- Vmware 设置桥接模式
在搭建VMware虚拟机的时候要配置网络 可以看到一共主要就3种 1.桥接模式(Bridge) 虚拟系统的IP可设置成与本机系统在同一网段,虚拟系统相当于网络内的一台.独立的机器,与本机共同插在一个H ...
- jquery post 同步异步总结[转]
1.post被请求多次,解决方法: 连接加入随机数 rand=""+Math.random() $.post("/Control/webControl.ashx?rand ...
- dijkstra算法理解+模板
2017-09-17 21:10:45 writer:pprp 看了看dijkstra算法,用自己语言总结一下主要过程吧, 首先,明确这个算法用处是在于计算单源最短路径问题并且边权非负,给出一个起点可 ...
- Dancing Links DLX
Dancing Links DLX Dancing Links 用来解精准覆盖问题. 精准覆盖问题有两种版本. 精准覆盖 : 给一个01矩阵,如何选出若干行,使得每列都有且仅有一个1. 可以求最少行数 ...