当我们平时在使用微信,QQ抢红包时,总会觉得很神奇,于是今天抽空研究了下其算法,然后参考了一些博客及自己的理解,写了一个算法。

规则:

1.所有人抢到金额之和等于红包金额,不能超过,也不能少于。

2.每个人至少抢到一分钱。

3.要保证所有人抢到金额的几率相等。

算法描述:

1)首先将所有金额m换算成最小单位分,其值为m:如1元=100分(m=100),4.23=423分(m=423)。

2)然后在区间(0,m)上得到(n-1)个随机数,即将所有金额随机划分成了n份。n为红包个数,即抢  红包的人数。

3)将得到的随机数放入放入list,并在list中加入0和m两个元素(主要是为了方便后面计算金额),然后对list进行排序。

代码示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;/*** 抢红包算法* @author Tony* 首先将所有金额m换算成最小单位分:如1元=100分,4.23=423分* 然后在区间(0,m)上得到(n-1)个随机数,即将所有金额随机划分成了n份。n为红包个数。*/
public class RedPackets{public static void main(String[] args) {int peopleCount = 10;int totalMoney = 100;getRandomMoney(peopleCount, totalMoney);}private static void getRandomMoney(int peopleCount, int totalMoney) {List<Integer> list = new ArrayList<Integer>();for(int i=0; i<peopleCount-1; i++) {int r = (int)(Math.random() * (totalMoney-1) + 1);if(list.contains(r)) {i--;} else {list.add(r);}}list.add(0);list.add(totalMoney);Collections.sort(list);for(int j=0; j<peopleCount; j++) {int get = list.get(j+1) - list.get(j);System.out.println("第" + (j+1) +"个人抢到:" + get);}}}

运行结果:

第1个人抢到:6
第2个人抢到:11
第3个人抢到:13
第4个人抢到:2
第5个人抢到:20
第6个人抢到:4
第7个人抢到:5
第8个人抢到:10

第9个人抢到:20

第10个人抢到:9

当然,这个算法还有优化的地方,欢迎在评论区讨论。

微信,QQ抢红包算法(Java版)相关推荐

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

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

  2. 微信公众号开发-Java版学习笔记

    微信公众号开发整体不难,主要是熟悉微信公众号常用的一些接口文档,然后会一门后端语言(比如java)即可. 罗召勇老师教程:微信公众号开发-Java版(蓝桥罗召勇) 微信公众号文档:微信公众号官方文档 ...

  3. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  4. 微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-翟东平-专题视频课程...

    微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-2445人已学习 课程介绍         微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识. 微信小 ...

  5. 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发

    微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  6. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  7. 微信公众号开发-java版 腾讯课堂(开发接入)

    微信公众号开发-java版 腾讯课堂 微信测试号申请地址: 微信二维码直接扫描登录 1.新建web项目 2.内网穿透映射公网ip  (免费隧道需要支付宝实名认证) 3.微信接入验证签名 TOKEN自己 ...

  8. Java算法:牛客网小米笔试真题算法Java版1-40题

    题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...

  9. Java算法:华为机试算法第二版(上),华为算法Java版

    牛客网华为机试练习题 文章目录 牛客网华为机试练习题 动态规划问题详解 前言 生活中的动态规划 2. 几个简单的概念 3. DP的典型应用:DAG最短路 4. 对DP原理的一点讨论 5. 例题:最长上 ...

最新文章

  1. 前谷歌董事长施密特:美国AI领导地位岌岌可危,科研预算投入得翻倍
  2. 超级实用!用Python写股票分析工具
  3. xul 创建一个按钮
  4. [html] html5的Notification桌面通知如何请求权限?
  5. 博客资源网小程序带流量主激励视频收益
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的在线心理测评管理系统
  7. 5G 是时候商用了?| 程序员硬核评测
  8. zabbix详解(六)——zabbix 添加监控主机
  9. Android Editable
  10. SuperMap 办公自动化服务平台
  11. java_math_BigInteger
  12. python调用bing翻译和有道翻译
  13. 问题解决型QCC课题的推行步骤
  14. CentOS7使用yum方式安装Docker(根据官方文档安装)
  15. Road to Coder _Game
  16. 常用web服务器架构理解
  17. 建一个网站需要多少钱
  18. 【深度学习原理第1篇】前馈神经网络,感知机,BP神经网络
  19. 实现多个文件夹名同时重命名的操作
  20. 为什么python代码运行不了_为什么我的python代码不能正常运行?

热门文章

  1. oracle 延迟加载,延迟约束禁止直接路径插入
  2. 移动端-H5输入框在弹起键盘后被遮挡问题
  3. firefox 添加 表单_将搜索表单添加到Firefox搜索栏
  4. 山西计算机网络技术专升本分数线_计算机网络技术专升本录取分数(综合分数线393分)...
  5. 【XDU-OJ系统-23】C语言程序设计题
  6. 上海交大裴凌教授:智能环境感知与室内定位
  7. 记瓜子二手车的一次面试
  8. 2019.9.3 瓜子二手车笔试题
  9. BT401蓝牙HID模块键盘鼠标支持BLE的补充说明
  10. vue实现文字滚动效果