`

微信红包金额生成算法---线段切割法

 
阅读更多

微信红包首先将金额M元按照要发的人数N分成随机的N个金额不等的红包份额。生成N个份之后,用户请求到了就将1份红包发个用户。

生成红包金额数的算法采用线段切割法:将金额看成一条线段,线段的长度范围是0到M*100,首先需要生成1~(M*100-1) 中间的(N-1)个随机的且不重复的数,可以使用这(N-1)个数去切割线段,切割后的每一份就是红包的金额数。

 

具体代码实现如下:

import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.*;

/**
 * 微信红包首先将金额M元按照要发的人数N分成随机的N个金额不等的红包份额。生成N个份之后,用户请求到了就将1份红包发个用户
 * 生成红包金额数的算法采用线段切割法:将金额看成一条线段,线段的长度范围是0到M*100,首先需要生成1~(M*100-1)
 * 中间的(N-1)个随机的且不重复的数,可以使用这(N-1)个数去切割线段,切割后的每一份就是红包的金额数。
 */
public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        exe(200,5);
    }

    /**
     *
     * @param amount 红包金额
     * @param friend 发出的红包数
     */
    private static void exe(int amount,int friend){
        int seed = 100 * amount;//将金额数按照一分钱来等分100*amount分
        int length  = 0;
        int m_length = friend-1;//在0~seed中生成m_length个随机不重复的数字

        //利用SecureRandom生成随机数
        SecureRandom secureRandom = null;
        //保证不重复且升序排序
        SortedSet<Integer> set = new TreeSet<>();
        try {
            secureRandom = SecureRandom.getInstance("SHA1PRNG");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        while (length < m_length){
            int num = secureRandom.nextInt(seed);
            if(num == 0) num = 1;
            set.add(num);
            length = set.size();
        }

        int preNum = 0;
        int currentNum = 0;
        int calc = 0;
        for (int i = 0; i < set.toArray().length+1 ; i++) {
            if (i < set.toArray().length){
                currentNum = (int)set.toArray()[i];
            }else {
                currentNum = seed;
            }

            System.out.println("第" +(i+1) +"个红包");
            System.out.println("红包金额=" + new BigDecimal((currentNum - preNum)).divide(new BigDecimal(100)) + "元");
            calc += (currentNum - preNum);
            System.out.println("已发:" +new BigDecimal(calc).divide(new BigDecimal(100)) + "元");
            preNum = currentNum;
        }
    }
}

 

分享到:
评论

相关推荐

    微信小程序用户授权-首页-登录master.zip

    微信小程序用户授权-首页-登录master.zip微信小程序用户授权-首页-登录master.zip微信小程序用户授权-首页-登录master.zip微信小程序用户授权-首页-登录master.zip微信小程序用户授权-首页-登录master.zip微信小程序...

    微信小程序 滴滴公交-查公交 (源码)

    微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)...

    微信小程序源码 IT-EBOOK(学习版)

    微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码...

    微信小程序 小游戏-别踩白块 (源码)

    微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)...

    微信小程序源码 电商-拼团 倒计时(学习版)

    微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信...

    微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)

    微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小...

    PHP微信通用SDKwechat-php-sdk-master.zip

    PHP微信通用SDKwechat-php-sdk-master.zip

    html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)

    html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)...

    微信小程序——IT-EBOOK(截图+源码).zip

    微信小程序——IT-EBOOK(截图+源码).zip 微信小程序——IT-EBOOK(截图+源码).zip 微信小程序——IT-EBOOK(截图+源码).zip 微信小程序——IT-EBOOK(截图+源码).zip 微信小程序——IT-EBOOK(截图+源码).zip ...

    微信小程序——d-AppleMusic(截图+源码).zip

    微信小程序——d-AppleMusic(截图+源码).zip 微信小程序——d-AppleMusic(截图+源码).zip 微信小程序——d-AppleMusic(截图+源码).zip 微信小程序——d-AppleMusic(截图+源码).zip 微信小程序——d-Apple...

    微信小程序——电商-拼团 倒计时(截图+源码).zip

    微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小...

    微信小程序项目源码-微信的设备故障报修管理系统设计与实现+ssm框架.zip

    微信小程序项目源码-微信的设备故障报修管理系统设计与实现+ssm框架.zip微信小程序项目源码-微信的设备故障报修管理系统设计与实现+ssm框架.zip微信小程序项目源码-微信的设备故障报修管理系统设计与实现+ssm框架....

    微信小程序 ---- 组件应用和实际开发的DEMO

    微信小程序是一种轻量级的应用开发平台,主要针对移动端,由腾讯公司推出,旨在提供便捷的、无需下载安装即可使用的线上服务。本主题聚焦于微信小程序的组件应用与实际开发,通过一系列DEMO来深入理解其核心功能和...

    微信小程序组件---授权信息弹窗

    在开发小程序的时候需要获取用户信息权限和用户手机号码,该组件使用弹窗的方式让用户点击确认授权:使用showUserInfoPopup();显示用户信息授权弹窗,使用showPhoneInfoPopup();显示用户电话号码授权弹窗

    微信3.1.0.41逆向-微信3.1.0.41HOOK接口-MFC调用实例方法源码

    微信3.1.0.41逆向-微信3.1.0.41HOOK接口(WeChatHelper3.1.0.41.dll)-MFC调用实例方法源码

    微信红包封面制作小程序源码 新手小白适用

    微信红包封面制作小程序源码。新手小白适用微信红包封面制作小程序源码。新手小白适用微信红包封面制作小程序源码。新手小白适用微信红包封面制作小程序源码。新手小白适用微信红包封面制作小程序源码。新手小白适用...

    130个微信小程序源码-[www.sumer.work]

    130个微信小程序源码--[www.sumer.work]130个微信小程序源码--[www.sumer.work]130个微信小程序源码--[www.sumer.work]130个微信小程序源码--[www.sumer.work]130个微信小程序源码--[www.sumer.work]130个微信小程序...

    微信小程序源码-二维码生成器.zip

    微信小程序源码-二维码生成器.zip微信小程序源码-二维码生成器.zip微信小程序源码-二维码生成器.zip微信小程序源码-二维码生成器.zip微信小程序源码-二维码生成器.zip微信小程序源码-二维码生成器.zip微信小程序源码...

    【微信小程序源码-毕业设计期末大作业】赞赏.zip

    微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-毕业设计期末大作业课程设计源码 微信小程序源码-...

    微信小程序毕业设计-微信小程序-时间管理小程序源码(95分以上课程设计).zip

    微信小程序毕业设计-微信小程序-时间管理小程序源码.zip 95分以上课程设计,代码完整下载即用无需修改,确保可以运行。也可作为期末大作业和课程设计。 安装教程 导入到微信开发者工具 配置云开发环境 创建云...

Global site tag (gtag.js) - Google Analytics