java实现红包要多少钱_java实现微信红包分配算法(示例代码)
红包算法分析
有人认为,抢红包的额度是从0.01到剩余平均值*N(N是一个系数,决定最大的红包值)之间,比如一共发了10块钱,发了10个红包:第一个人可以拿到(0.01~1*N)之间的一个红包值,当然为了确保所有人至少有1分钱拿,不能前几个人就把钱拿光了,因此需要有一个判断算法。举个例子,如果每个人都拿了自己的最大值:
package红包分配;public classtest {public static voidmain(String[] args){float num=10,N=1.9f;int people=10;for(int i=0;i<10;i++)
{
System.out.println("the number"+people+"can get "+num/people*N);
num=num-num/people*N;
people--;
}
System.out.println("there remain"+num);
}
}
运行结果如下:
the number10can get 1.9the number9can get1.71the number8can get1.5176251the number7can get1.3225019the number6can get1.1241267the number5can get0.9217838the number4can get0.71438247the number3can get0.5000677the number2can get0.2750373the number1can get0.027503723there remain-0.01302808
最终剩余的钱数为负数,不符合要求,所以说基数的选取是非常重要的。
设置金额的限额
private static final float MINMONEY = 0.01f;private static final float MAXMONEY = 200f;
红包的最小额度是0.01元,最大额度是200元。
判断金额是否合法
如果金额超过限额,就出错了
private boolean isRight(float money,intcount)
{double avg = money/count;if(avg
}else if(avg>MAXMONEY)
{return false;
}return true;
}
随机产生红包
用随机方法产生一个在最大值和最小值之间的一个红包,并判断该红包是否合法,是否在产生这个红包之后红包金额变成负数。另外,在这次产生红包值较小时,下一次就产生一个大一点的红包。
private float randomRedPacket(float money,float mins,float maxs,intcount)
{if(count==1)
{return (float)(Math.round(money*100))/100;
}if(mins ==maxs)
{return mins;//如果最大值和最小值一样,就返回mins
}float max = maxs>money?money:maxs;float one = ((float)Math.random()*(max-mins)+mins);
one= (float)(Math.round(one*100))/100;float moneyOther = money -one;if(isRight(moneyOther,count-1))
{returnone;
}else{//重新分配
float avg = moneyOther / (count-1);if(avg
{returnrandomRedPacket(money,mins,one,count);
}else if(avg>MAXMONEY)
{returnrandomRedPacket(money,one,maxs,count);
}
}returnone;
}
实现红包分配
为了避免一个红包占用大量的资金,设定非最后一个红包的最大金额,可以设置为平均值的N倍,基于前面的方法就可以实现红包的分配了。
private static final float TIMES = 2.1f;public List splitRedPackets(float money,intcount)
{if(!isRight(money,count))
{return null;
}
List list = new ArrayList();float max = (float)(money*TIMES/count);
max= max>MAXMONEY?MAXMONEY:max;for(int i=0;i
{float one = randomRedPacket(money,MINMONEY,max,count-i);
list.add(one);
money-=one;
}returnlist;
}
private static final float TIMES = 2.1f;public List splitRedPackets(float money,intcount)
{if(!isRight(money,count))
{return null;
}
List list = new ArrayList();float max = (float)(money*TIMES/count);
max= max>MAXMONEY?MAXMONEY:max;for(int i=0;i
{float one = randomRedPacket(money,MINMONEY,max,count-i);
list.add(one);
money-=one;
}returnlist;
}
编写主函数
public static voidmain(String[] args) {
RedPacketUtil util= newRedPacketUtil();
System.out.println(util.splitRedPackets(200, 100));
}
java实现红包要多少钱_java实现微信红包分配算法(示例代码)相关推荐
- java实现红包要多少钱_java实现微信红包分配算法
本文由我司收集整编,推荐下载,如有疑问,请与我司联系 java 实现微信红包分配算法 2017/03/25 0 红包算法分析有人认为,抢红包的额度是从 0.01 到剩余平均值 *N(N 是一个系数,决 ...
- java实现红包要多少钱_Java实现发红包模拟
packagecom.cmk;import javax.swing.*;import java.awt.*;importjava.awt.event.KeyAdapter;importjava.awt ...
- java实现红包要多少钱_Java实现发红包功能
Java发红包案例,供大家参考,具体内容如下 首先我们需要分析这个代码的架构是什么,需要什么类组成等. 我们需要建立4个类,这4个类分别是用户类.群主类.成员类,运行类: 因为群主类和成员类都有共同的 ...
- 售后退款的java代码_SpringBoot 微信退款功能的示例代码
一:微信支付证书配置 二:证书读取以及读取后的使用 package com.zhx.guides.assistant.config.wechatpay; import org.apache.commo ...
- 用c语言写的新年搞笑祝福程序,新年微信红包搞笑句子_2020新年幽默微信红包祝福语...
每逢佳节,大家都喜欢用发红包的方式来表示祝福和祝愿.但随着支付手段日新月异,更多市民喜欢发支付宝红包.微信红包.以下是小编给大家整理的新年微信红包搞笑句子_2020新年幽默微信红包祝福语,希望可以帮到 ...
- java实现红包要多少钱_JAVA实现简单抢红包算法(模拟真实抢红包)
闲来无事,最近项目需求要写出用户登录首页来发现金红包,没有限额.我就自己稍微计算了一下如果有限额该怎么写.觉得这样与微信红包差不多.等项目需求完成以后.正好来博客贴一下我自己写的拆红包算法.个人觉得这 ...
- java实现红包要多少钱_java实现红包的分配算法
个人推测,微信红包在发出的时候已经分配好金额.比如一个10元的红包发给甲乙丙三个人,其实在红包发出去的时候,已经确定了第一个会领取多少,第二个会领取多少金额. 而不是在领取的时候才计算的.下面贴出实现 ...
- java开发保险案例_Java实现双保险线程的示例代码
双保险线程,每次启动2个相同的线程,互相检测,避免线程死锁造成影响. 两个线程都运行,但只有一个线程执行业务,但都会检测对方的时间戳 如果时间戳超过休眠时间3倍没有更新的话,则重新启动对方线程. 例子 ...
- java异常判断_Java异常退出条件的判断示例代码
无论是功能性代码还是算法性代码,程序都是一系列流程的合集 既然是流程就分为:一般流程和异常流程: 一般流程保证了基本功能: 异常流程则是对程序稳定性的保证,不能因为一些非法输入,项目就挂了: 注意,布 ...
最新文章
- Notepadd++主题推荐
- nodejs ajax进度条,Ajax异步文件上传与NodeJS express服务端处理的示例分析
- Slax Linux安装——备忘篇
- GLSL实现HDR Rendering 【转】
- jsf tree组件_JSF和“立即”属性–命令组件
- vCenter线上操作磁盘扩容
- Convert.Int32、(int)和int.Parse三者的区别
- 玩Azkaban跳过的坑
- /etc目录下重要文件解释
- zookeeper专题:使用zookeeper客户端实现动态监听节点并获取数据
- Anaconda3+Python3.6搭建Tensorflow
- CODE:BLOCK中的CreateProcess: No such file or directory
- [轉]javascript 的 location 各種用法
- sqlserver 数据库文件损坏、数据库可疑修复处理
- H3CSE园区-组播路由协议
- python blp模型 估计_python实践——时间序列分析建模理论及代码实现
- Hibernate的4种继承关系
- 2019xman-shellmaster wp
- SSL协议与Nginx安装SSL模块和ssl证书
- mapbox+threejs实现三维气泡球体专题图