项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.算法实现1

发红包现在作为一种人民群众喜闻乐见的业余文化活动,尤其在过年过节的时候发挥了重要的作用。现在我们来模拟微信发红包写个简单的小算法,逻辑比较简单,具体的过程参考注释。

public class HongBaoAlgorithm {// 每个红包最小金额private static final double MINMONEY = 0.01;public static void hongbaotest(double totalmoney, int count) {double[] moneys = new double[count];for(int i=1; i<count; i++) {// 当前第i个红包的最大金额与实际金额,实际金额保证不小于最小金额double maxmoney = (totalmoney - (count-i) * MINMONEY) / (count - i);double curmoney = Math.random() * (maxmoney - MINMONEY) + MINMONEY;totalmoney -= curmoney;moneys[i-1] = curmoney;}// 最后一个红包moneys[count-1] = totalmoney;printnums(moneys);}public static void printnums(double[] moneys) {double sum = 0.0;for(double each: moneys) {System.out.println(each);sum += each;}System.out.println("the sum is: " + sum);}public static void main(String[] args) {hongbaotest(200, 10);}
}

某次运行的输出结果

5.134629101796313
9.691355220067367
15.481764414378727
25.07662708441383
27.70410154666285
13.53784589067451
1.3830881259396322
9.043098630641323
18.340855733059616
74.60663425236581
the sum is: 199.99999999999997

最后小数点后面的误差是由double类型带来的误差。当然实际中处理钱相关的数据可以用BigDecimal类保证精度。

2.算法实现2

public class RedPacket {public static double[] redPacketAlgorithm(int n, double money) {double minmoney = 0.01;double[] result = new double[n];double[] randnums = new double[n];double allocateMoney = money - n * minmoney; // 先保证每个人有最少的红包double randall = 0.0;// 每个人对应的随机金额for(int i=0; i<n; i++) {double tmp = Math.random();randnums[i] = tmp;randall += tmp;}// 先加上随机金额,再加上最小数double remain = allocateMoney;for(int i=0; i<n-1; i++) {result[i] = randnums[i] * allocateMoney / randall;remain -= result[i];result[i] += minmoney;}// 最后一个是浮点数运算result[n-1] = remain + minmoney;return result;}public static void main(String[] args) {int n = 10;double money = 100;double[] result = redPacketAlgorithm(n, money);for(double packet: result) {System.out.println(packet);}}

某一次运行结果

9.90223393609771
7.8941395345103915
6.116377418736803
3.2320391563856288
7.4663262793515
11.966502103902155
17.69214141464413
17.873758367208012
2.2542435203618156
15.602238268801857

模拟微信发红包算法java实现相关推荐

  1. 编写一个函数,简单模拟微信发红包算法。

    编写一个函数,简单模拟微信发红包算法. 函数有两个参数:一个参数表示红包总金额,默认值为100:另一个参数表示红包数量,默认值为15. 所有随机产生的红包金额(保留两位小数)存放在一个列表(同时作为函 ...

  2. python模拟微信发红包算法_微信红包的随机算法是怎样实现的?

    有人问过微信的人,大致是这样: 先上代码: public static double getRandomMoney(RedPackage _redPackage) { // remainSize 剩余 ...

  3. Random类模拟微信发红包

    //用随机数模拟微信发红包的场景 import java.util.Random; import java.util.Scanner; public class Demo4 { public stat ...

  4. 编写一个函数,模拟微信发红包的红包分配过程。函数有两个参数:一个参数表示红包总金额,默认值为100,另一个参数表示红包数量,默认为10。程序输入:红包总金额和红包数量;程序输出:每个红包的金额。要求:

    题目 ‬‬编写一个函数,模拟微信发红包的红包分配过程.函数有两个参数:一个参数表示红包总金额,默认值为100,另一个参数表示红包数量,默认为10.程序输入:红包总金额和红包数量:程序输出:每个红包的金 ...

  5. python模拟微信发红包,并验证随机性

    python模拟微信发红包,输入金额和红包个数,得到结果,多次发红包,验证先抢后抢红包大小的随机性是否一样. 1.思路 如100元发5个红包,结合几个点几个线段的数学知识,需要在0-100之间取4个不 ...

  6. Java模拟微信发红包

    作者说: 这个实验运用到了Random类的生成随机数的知识.String类的format方法保留两位小数.灵活运用类型转换. 这次注释写的很详细,因为我做这个实验的时候花了很长时间,我第一次用的方法不 ...

  7. Java模拟微信发红包,一看就会

    自2014年1月26日悄悄上线后,微信红包迅速流行开来,其火爆程度,不亚于此前的"打飞机"小游戏.而收到红包后想要提现,就必须绑定银行卡,这样一来,绑定微信支付的用户数量大增. 先 ...

  8. 用Java写微信红包实现模拟微信发红包

    继承关系如下 题目: 某软件有多名用户(User类),某群聊中有群主(Manager类)和多名普通成员(Member类),现群主大方给成员发红包.红包的规则:群主发一笔金额,从群主余额中扣除,红包分配 ...

  9. 模拟微信发红包的算法工具类

    刚开始这个算法本身是bug 的,就是生成的尾数老是存在0,1,9 特别多,感觉上不是很好,就跟着思路修改啦一下,现在分享出来希望对大家有用,但是还是不是很完美,就是出现整数的概率很小 ,大家可以多试试 ...

  10. java微信红包_Java模拟微信发红包(普通红包、拼手气红包)

    假设红包总额M元,分给N个人. 满足条件: 如果是普通红包,每个人获得的金额都一样: 如果是拼手气红包,则有所区别,但不能金额过于离谱,比如第一个获得的太多,以至于后来的人都几乎没得分. 注意点: 1 ...

最新文章

  1. python自学攻略-大牛整理!Python学习方法和学习路线,看完茅塞顿开!
  2. [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker
  3. svg配合css3动画_带有Adobe Illustrator,HTML和CSS的任何网站的SVG动画
  4. linux下的SSHD被连接端口修改
  5. 前端绘制绘制图表_绘制图表(第2页):JavaScript图表库的比较
  6. 中介是如何快速炒高房租,并让你入坑的
  7. 策略模式/Strategy
  8. life words
  9. GEO hash 核心原理
  10. java+log日志实例_java.util.log,使用3个不同的记录器实例/日志文件,获得.1.2等
  11. jQuery ajax 文件上传携带附加参数
  12. PRML第四章之分类的线性模型
  13. window防火墙端口映射_Windows 防火墙上也有端口映射功能
  14. MultipartFile实现图片上传上传
  15. android 开发之activity 启动流程《一》
  16. php更换banner图片,如何替换banner上的图片?
  17. 互联网金融常见的一些业务
  18. 2022爱分析·人工智能厂商全景报告
  19. 使用开源激光SLAM方案LIO-SAM运行KITTI数据集,如有用,请评论雷锋
  20. java存储张三李四_JAVA_day14_面向对象的特征

热门文章

  1. 微软收购开源数据库厂商Citus Data,云数据库服务能力再填新砝码
  2. PostgreSQL 全文检索 - 词频统计
  3. js 正则清除html格式
  4. 在EF4.1的DBContext中实现事务处理(BeginTransaction)和直接执行SQL语句的示例
  5. oracle忘记sys密码处理
  6. [C++]VC自定义发IP包例子
  7. idea自动生成unit test插件
  8. 五月康乃馨,爱心献父母---母亲节快乐
  9. ORACLE11g R2数据库安装(一)
  10. python有关urllib,urllib2和requests应用记录