java 微信随机红包算法代码实例
作者:李明泽 发布时间:2022-12-03 12:29:08
标签:java,微信,随机红包,算法
前几天的一个晚上突然想到微信红包应该有一个随机算法,就自己试着写了下,也不知道对不对,看了看网上的说法,好像到现在为止官方也没有给出一个确切的算法,只好在这里献丑了,先贴出代码:
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),直到最后一个红包时,把所有的剩余金额塞进去。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


猜你喜欢
- 一种方法是可以在窗体的属性面板将窗体的 ControlBox属性设置为false,或者在窗体的构造函数中这样写:public F
- 关于ListBoxListBox是WinForm中的列表控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过
- 下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时
- 在c和c++中,我们知道没办法起一个变量名叫int,因为这是C/C++保留的关键字,起这么一个变量名没办法区分到底是int类型还是int变量
- 前言TensorFlow是Google开源的一款人工智能学习系统。为什么叫这个名字呢?Tensor的意思是张量,代表N维数组;Flow的意思
- 1. 多行编辑先来体验一下从xml文件拷贝字段新建实体对象一般我们为了新建多表连接后映射的 ResultMap ,耗费不少时间,那么我们就来
- 题目要求:两人比赛,A,B,每人最开始分得6张手牌,手牌大小为从1到9 A先出牌,B后出牌,若出牌在桌面上存在,在出牌人获得两张相同牌中间的
- [] 是针对特定类型、固定长度的。List 是针对特定类型、任意长度的。Array 是针对任意类型、固定长度的。ArrayList 是针对任
- 类的定义面向对象的程序设计中,类可以看作是我们自定义的数据类型,那么,如何能更加优美,更加高效地定义它就显得尤为重要。类中的成员有很多,每一
- 协变协变概念令人费解,多半是取名或者翻译的锅,其实是很容易理解的。比如大街上有一只狗,我说大家快看,这有一只动物!这个非常自然,虽然动物并不
- Android studio4.1更新后出现的问题如下> Task : app : kaptDebugKotlin FAILEDFAI
- 目录一、Collections.sort的简单使用二、问题提出三、Comparable实现排序四、Comparator实现排序五、Compa
- CoordinatorLayout 实现了多种Material Design中提到的滚动效果。目前这个框架提供了几种不用写动画代码就能工作的
- 本文主要是对Handler和消息循环的实现原理进行源码分析,如果不熟悉Handler可以参见博文《详解Android中Handler的使用方
- 本文为大家分享了java多线程的简单实现及线程池实例,供大家参考,具体内容如下一、多线程的两种实现方式1、继承Thread类的多线程/**
- 本文以实例形式演示了C#虚方法的声明与使用。实例内容主要包括:演示虚方法的声明和使用,定义虚方法进而求几何面积,用虚方法求原始图形的面积、正
- 先执行以一个简单的示例:static void Main(string[] args) { &nb
- 常用的字符串转date,和日期转字符串的方法,具体内容如下package com.cq2022.zago.base.util; import
- 本文实例讲述了C#滚动字幕的实现方法,分享给大家供大家参考。具体方法如下:在c#中其实滚动屏幕的实现其实很简单,只需要用到Graphics.
- 本文实例讲述了C++求四个正整数最大公约数的方法。分享给大家供大家参考,具体如下:/** 作 者: 刘同宾* 完成日期:2012 年 11