java模拟实现微信红包算法

本文实例为大家分享了java实现微信红包算法的具体代码,供大家参考,具体内容如下

实现过程

1.代码如下(示例):

import java.math.BigDecimal;
import java.util.ArrayList;

public class GenRedPacket {
 static ArrayList<BigDecimal> list = new ArrayList<BigDecimal>();;

 public static BigDecimal bianLiJia(ArrayList<BigDecimal> list) {
 BigDecimal b = new BigDecimal("0");
 for (int i = 0; i < list.size(); i++) {
 b = b.add(list.get(i));
 }
 return b;
 }

 public static void bianLiJian(BigDecimal b1, BigDecimal b2) {
 if (bianLiJia(list).doubleValue() < b1.doubleValue()) {
 BigDecimal b3 = bianLiJia(list);
 BigDecimal b4 = b1.subtract(b3);
 int i = 0;
 list.set(i = (int) (Math.random() * (b2.intValue())), list.get(i).add(b4));
 } else if (bianLiJia(list).doubleValue() > b1.doubleValue()) {
 BigDecimal b3 = bianLiJia(list);
 BigDecimal b4 = b3.subtract(b1).divide(b2, 2, BigDecimal.ROUND_FLOOR);
 for (int i = 0; i < list.size(); i++) {
 if (list.get(i).doubleValue() > b4.doubleValue()) {
  list.set(i, list.get(i).subtract(b4));
 }
 }
 }
 if (bianLiJia(list).doubleValue() > b1.doubleValue()) {
 BigDecimal b3 = bianLiJia(list);
 BigDecimal b4 = b3.subtract(b1);
 for (int i = 0; i < list.size(); i++) {
 if (list.get(i).doubleValue() > b4.doubleValue()) {
  list.set(i, list.get(i).subtract(b4));
 }
 }
 bianLiJian(b1, b2);
 }
 }

 public static ArrayList<BigDecimal> genRedPacket(String total, int count) {

 BigDecimal b1 = new BigDecimal(total);
 BigDecimal b2 = new BigDecimal(count);
 for (int i = 0; i < count; i++) {
 String s = String.valueOf(((int) (Math.random() * (Integer.parseInt(total) + 1)))
  + ((int) (Math.random() * 100) + 1) / 100.0);
 BigDecimal b3 = new BigDecimal(s);
 list.add(b3);
 }
 bianLiJian(b1, b2);
 return list;
 }

 public void fhb(String total, int count) {
 genRedPacket(total,count);
 int i = 1;
 for(BigDecimal b:list) {
 System.out.println("第"+i+"个红包:"+b+"元");
 i++;
 }
 }
}

2.代码如下(示例):

import java.text.ParseException;
import java.util.Scanner;

public class Test {

 public static void main(String[] args) throws ParseException {
 Scanner scanner = new Scanner(System.in);
 GenRedPacket dp = new GenRedPacket();
 System.out.print("请输入要发红包金额与个数:");
 String s1 = scanner.next();
 int a1 = scanner.nextInt();
 dp.fhb(s1, a1);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java微信支付-微信红包

    微信红包的使用已经很广泛,本篇文章介绍了微信发红包的实例,需要有认证的公众号,且开通了微信支付,商户平台且开通了现金红包的权限即可. https://pay.weixin.qq.com商户登陆地址.选择查看营销中心的现金红包 https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1 现金红包的官网文档说明 先看几个图 简单的测试.前提需要你去商户平台先充值.不支持预支付.本文只是总结微信现金红包接口的调用与

  • java微信红包实现算法

    随着目前微信越来越火,所以研究微信的人也就越来越多,这不前一段时间,我们公司就让我做一个微信公众号中问卷调查发红包功能,经过一段时间的研究,把功能完成,里面主要的实现步骤都是按照微信公众号开发文档来的,很详细,在整个过程唯有红包算法需要仔细编写,因为毕竟涉及到钱,所以得小心,而且不仅微信中需要发红包,我们在做APP时可能也会遇到需要发红包的功能,所以这里列出红包的核心算法,供大家一起学习研究. public static List getRed(int number,float total,do

  • java写的伪微信红包功能示例代码

    性能优化点: 1.使用int不使用double.(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点后前两位. 2.random() 方法用于返回一个随机数,随机数范围为 0.0 =< Math.random < 1.0.所以,当每人只能分到1分钱时,不用生成随机数(随机数只能生成0分,不大于最小值,会死循环). import java.util.HashMap; import java.util.Map; public class WXTRedPac

  • java实现微信红包 拼手气红包

    本文实例为大家分享了java实现微信红包的具体代码,供大家参考,具体内容如下 要求 基于BigDecimal类实现微信红包算法的功能,比如设置红包总金额,然后设置需要生成的红包个数,为每个红包随机指定金额,最低不能低于0.01元,要求: 1.每个红包金额随机指定 2.每个红包金额不能低于0.01元 3.要求每个红包的金额之和恰好等于总金额 4.如果平均每个红包的金额不足0.01元时抛出一个RedPacketException,提示每个红包金额不能少于0.01元 实现方法 该题主要考察java常用

  • Java实现仿微信红包分配规则

    最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教. 算法介绍 一.红包金额限制 对于微信红包,我们知道没人随机的最小红包是1分,最大金额是200元,这里我们同样来设置红包的范围,下面代码我们统一金钱的单位为分. //最小红包额度 private static final int MINMONEY = 1; //最大红包额度 private static final int MAXMONEY = 200

  • java模拟实现微信红包算法

    本文实例为大家分享了java实现微信红包算法的具体代码,供大家参考,具体内容如下 实现过程 1.代码如下(示例): import java.math.BigDecimal; import java.util.ArrayList; public class GenRedPacket { static ArrayList<BigDecimal> list = new ArrayList<BigDecimal>();; public static BigDecimal bianLiJia

  • JavaScript实现微信红包算法及问题解决方法

    专栏停更了很久,向大家说声抱歉.今天的主题是使用JavaScript模拟实现微信抢红包的算法.这个题目看起来很简单,不就是一个随机函数吗?我们一起实现看看. 我们假设有一个100元的红包,要发给10个人.为了保证公平,算法需要保证以下的原则: 每个人最少能抢到0.01元 每个人的机会平等 所有人的金额之和等于100元 1.简单的随机函数实现 很多朋友的一般思路是: 第一步:从0-100中随机一个数,得到第一个红包金额. 第二步:从0-剩余金额中随机一个数,得到第二个红包金额. 第三步:... 最

  • Flutter利用Canvas模拟实现微信红包领取效果

    目录 前言 效果 红包弹出 红包布局 上半部分 下半部分 金币绘制 金币文字绘制 头像和文字 金币旋转 红包开启 结果弹出 前言 前面写了一篇Flutter利用Canvas绘制精美表盘效果详解的文章,对 Flutter 中的 Canvas 使用有了进一步的理解,就想着再用 Canvas 实现一个什么样的效果来加深一下对 Canvas 使用的理解,这个时候正好看到群里有人发红包,于是就想着能不能在 Flutter 中使用 Canvas 实现微信领取红包的效果?想到就做,知行合一,经过几天空余时间的

  • php实现的微信红包算法分析(非官方)

    本文实例讲述了php实现的微信红包算法.分享给大家供大家参考.具体如下: 最近一直在微信群里体验红包功能,红包类型有两种: 1. 普通红包 2. 拼手气红包 普通红包就不用多解析了,大锅饭原理,平分. 拼手气红包讲的是手气(运气),有人可以抢到很多,有人抢的少得可怜,当然也不是先抢就一定多,说到底了就是随机. 想了想,自己写写看,能不能实现类似的功能(不敢说是算法). // $bonus_total 红包总金额 // $bonus_count 红包个数 // $bonus_type 红包类型 1

  • java 微信随机红包算法代码实例

    前几天的一个晚上突然想到微信红包应该有一个随机算法,就自己试着写了下,也不知道对不对,看了看网上的说法,好像到现在为止官方也没有给出一个确切的算法,只好在这里献丑了,先贴出代码: public static double [] getMoney(double money, int num){ Random r = new Random(); DecimalFormat format = new DecimalFormat(".##"); double middle = Double.p

  • Java实现4种微信抢红包算法(小结)

    目录 概述 一.剩余金额随机法 二.二倍均值法(微信红包采用此法) 三.整体随机法 四.割线法 概述 14年微信推出红包功能以后,很多公司开始上自己的红包功能,到现在为止仍然有很多红包开发的需求,实现抢红包算法也是面试常考题. 要求: 保证每个红包最少分得0.01元 保证每个红包金额概率尽量均衡 所有红包累计金额登于红包总金额 本文提供4中红包算法及Java代码实现demo,仅供参考.其中每种算法测试场景为:0.1元10个包,1元10个包,100元10个包,1000元10个包. 一.剩余金额随机

  • Java实现微信红包分配规则

    最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教. 算法介绍 一.红包金额限制 对于微信红包,我们知道没人随机的最小红包是1分,最大金额是200元,这里我们同样来设置红包的范围,下面代码我们统一金钱的单位为分. //最小红包额度 private static final int MINMONEY = 1; //最大红包额度 private static final int MAXMONEY = 200

随机推荐