最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发。

public class WxAlgorithm{

/**

* @param moneySum 输入总金额

* @param redNum 输入红包数量

*/

private static void wxAlgorithm(double moneySum, int redNum) {

// 设置最小的金额

double moneyMin = 0.01;

Random random = new Random();

//精确小数点2位

NumberFormat formatter = new DecimalFormat("#.##");

for (int i=1;i

{

//随机一个数,数值范围在最小值与余额之间

String money = formatter.format(random.nextDouble() * (moneySum - moneyMin) + moneyMin);

//数值转换

moneySum = Double.valueOf(formatter.format(moneySum - Double.valueOf(money)));

System.out.println("第"+i+"个红包:" + money + "元 ,余额:" + moneySum);

}

System.out.println("最后个红包:" + moneySum + "元 ,余额:" + (moneySum - moneySum));

}

public static void main(String[] args) {

wxAlgorithm(10.26, 9);

}

}

后来又在网上搜集了一些微信随机生成红包算法,供大家参考。

public static double [] getMoney(double money, int num){

Random r = new Random();

DecimalFormat format = new DecimalFormat(".##");

double middle = Double.parseDouble(format.format(money/num));

double [] dou = new double[num];

double redMoney = 0;

double nextMoney = money;

double sum = 0;

int index = 0;

for(int i=num;i>0;i--){

if(i == 1){

dou[index] = nextMoney;

}else{

while(true){

String str = format.format(r.nextDouble()*nextMoney);

redMoney = Double.parseDouble(str);

if(redMoney>0 && redMoney < middle){

break;

}

}

nextMoney = Double.parseDouble(format.format(nextMoney - redMoney));

sum = sum + redMoney;

dou[index] = redMoney;

middle = Double.parseDouble(format.format(nextMoney/(i-1)));

index++;

}

}

return dou;

}

这里一个基本思路是这样的:首先算出红包的平均值,再通过一个随机红包数小于这个平均值的红包,当该红包发完后,红包总金额需要相应减少,同时重新计算这个平均值:新的总金额%(原总红包数-1),直到最后一个红包时,把所有的剩余金额塞进去。

还有许多精彩源码分享:java简单的抢红包的随机分配红包算法实现源码。

package com.sunron.test;

import java.math.BigDecimal;

import org.junit.Test;

public class HongBao {

@Test

public void testHonbao(){

hb(100, 9, 0.01);//金额,个数,最少值

//zb();

}

void hb(double total,int num,double min){

for(int i=1;i

double safe_total=(total-(num-i)*min)/(num-i);

double money=Math.random()*(safe_total-min)+min;

BigDecimal money_bd=new BigDecimal(money);

money=money_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();

total=total-money;

BigDecimal total_bd=new BigDecimal(total);

total=total_bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();

System.out.println("第"+i+"个红包:"+money+",余额为:"+total+"元");

}

System.out.println("第"+num+"个红包:"+total+",余额为:0元");

}

void zb(){

for(int a=0;a<=10000;a++){

if(a % 1000== 0)

System.out.println (a);

}

}

}

别人在抢红包,我们就来研究研究随机发红包的算法:

public static void main(String[] args) {

//红包数

int number = 10;

//红包总额

float total = 100;

float money;

//最小红包

double min = 1;

double max;

int i = 1;

List math = new ArrayList();

DecimalFormat df = new DecimalFormat("###.##");

while (i < number) {

//保证即使一个红包是最大的了,后面剩下的红包,每个红包也不会小于最小值

max = total - min * (number - i);

int k = (int)(number - i) / 2;

//保证最后两个人拿的红包不超出剩余红包

if (number - i <= 2) {

k = number - i;

}

//最大的红包限定的平均线上下

max = max / k;

//保证每个红包大于最小值,又不会大于最大值

money = (int) (min * 100 + Math.random() * (max * 100 - min * 100 + 1));

money = (float)money / 100;

//保留两位小数

money = Float.parseFloat(df.format(money));

total=(int)(total*100 - money*100);

total = total/100;

math.add(money);

System.out.println("第" + i + "个人拿到" + money + "剩下" + total);

i++;

//最后一个人拿走剩下的红包

if (i == number) {

math.add(total);

System.out.println("第" + i + "个人拿到" + total + "剩下0");

}

}

//取数组中最大的一个值的索引

System.out.println("本轮发红包中第" + (math.indexOf(Collections.max(math)) + 1) + "个人手气最佳");

}

随机红包 java_微信随机生成红包金额算法java版相关推荐

  1. java 随机金额_java_微信随机生成红包金额算法java版,最近几年玩得最疯狂的应该是 - phpStudy...

    微信随机生成红包金额算法java版 最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public cl ...

  2. java 微信抽奖_微信随机生成红包金额算法java版

    最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public class WxAlgorithm{ / ...

  3. 把数字随机分成 php,php随机数 微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求 预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分 ...

  4. 微信红包随机数字_微信随机红包数详解和算法代码

    1 需求 写一个固定红包 + 随机红包 固定红包就是每个红包金额一样,有多少个就发多少个固定红包金额就行. 随机红包的需求是.比如红包总金额5元,需要发10个红包.随机范围是 0.01到0.99:5元 ...

  5. 微信手气红包算法 php,微信随机生成红包金额算法php版

    最近在研究发红包的功能,于是写了个红包的生成算法. 红包生成算法的需求预先生成所有的红包还是一个请求随机生成一个红包 简单来说,就是把一个大整数m分解(直接以"分为单位,如1元即100)分解 ...

  6. JAVA程序红包_微信小程序红包(Java版)

    文章更新说明: 1.小程序源码,特简单,仅仅一个按钮点击时间,里面传递的package等参数是服务端请求返回参数,贴出来的就是核心,源码地址暂无法访问.(2020-03-11) 2.文章留言可当日回复 ...

  7. 微信红包 java_微信支付-微信红包Java版本

    https://zb.oschina.net/market/opus/1325c0ab3ac1f4b6 代码链接,可根据需求出方案与代码. 需要有认证的公众号,且开通了微信支付,商户平台且开通了现金红 ...

  8. 微信机器人红包java_微信机器人_奇迹蛋_java实现

    [实例简介] 参考了别人的一些微信开发方法,自己实现了一个简单的微信机器人,部署在百度云上,能够点歌,查询天气,调教对话.可关注微信公众号:奇迹蛋. 实现说明:http://blog.csdn.net ...

  9. 微信卡券 java_微信小程序领取卡券(java)

    最近做了个领取微信卡券的小程序,看了很多文档资料以及花了很多时间才算搞定的,不过也算是好事多磨,这边记录分享一下,也算给一点提升. 一.开发前准备 1:申请微信公众号 和 微信小程序,这是两个不同的东 ...

最新文章

  1. 【高斯消元】兼 【期望dp】例题
  2. vue component created没有触发_Vue 全局数据管理-Vuex
  3. 如何基于 K8s 构建下一代 DevOps 平台?
  4. vue axios 跨域_SpringBoot+Vue从零开始搭建系统(三)前后端整合二
  5. SQL SERVER 一个SQL语句的执行顺序
  6. codeforces1167 E. Range Deleting(双指针)
  7. 前端学习(3344):数组方法的总结和应用
  8. java图片的导出,并压缩
  9. 麻省理工学院推出数据美国大数据可视化工具
  10. 锋利的jQuery-4--图片切换的一个例子(自己理解后写的,以备忘记时看看)
  11. easyui下拉选项多怎么解决_30岁以后皮肤松弛皱纹越来越多怎么办?这组瑜伽帮你解决...
  12. c++实验题:设计两个酒店管理员客房管理的类:一个是Person类,要求储存房号、客户姓名和身份证号的信息;另一个类是Client类,要求新增客户的订房、退房和消费金额等信息,并给出相关测试算法。
  13. 斯蒂文斯理工学院计算机专业,斯蒂文斯理工学院计算机专业
  14. 美国3D理发师可剪出球星脸发型
  15. uniapp一键登录功能
  16. 狂神docker学习笔记
  17. 淘宝天猫店招空白间隔去除
  18. ISP-长短曝光融合生成HDR图像
  19. 【allegro 17.4软件操作保姆级教程八】布线操作基础之三
  20. content root修改问题

热门文章

  1. 抗混叠滤波及折叠频率
  2. Tomcat配置和部署
  3. 马尔可夫随机场(Markov Random Field)与马尔可夫链
  4. 导航系统设计专题(六)——松组合导航系统与紧组合导航系统
  5. 骚操作之rsync下行同步+lnotify实时同步详解
  6. android相框_如何将旧的Android平板电脑变成自动更新的数码相框
  7. 【网络安全】文件上传漏洞 详解
  8. oracle blob类型在,Oracle blob类型 实践
  9. Portainer添加远程Docker(Docker API)
  10. Java入门基础教程第一篇