微信红包首先将金额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微信小程序...
微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)微信小程序 滴滴公交-查公交 (源码)...
微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码 IT-EBOOK(学习版)微信小程序源码...
微信小程序系列----有三十个微信小程序的组件应用和实际开发的一些DEMO!
微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)微信小程序 小游戏-别踩白块 (源码)...
微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信小程序源码 电商-拼团 倒计时(学习版)微信...
微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小游戏源码 游戏-勇士斗恶龙(仅用于学习参考)微信小...
html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)html5微信小游戏源码 游戏-勇士斗恶龙(仅用于参考)...
微信小程序——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-Apple...
微信小程序-原生-使用微信开发者工具
微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小程序——电商-拼团 倒计时(截图+源码).zip 微信小...
微信支付工具---appid和商户号在配置文件中放置,没有放里面,。退款回调和付款回调也没有,退款证书自己在微信里面下载
在开发小程序的时候需要获取用户信息权限和用户手机号码,该组件使用弹窗的方式让用户点击确认授权:使用showUserInfoPopup();显示用户信息授权弹窗,使用showPhoneInfoPopup();显示用户电话号码授权弹窗
微信小程序申请模板-电商平台对用户交易纠纷处理的机制或方案.docx微信小程序申请模板-电商平台对用户交易纠纷处理的机制或方案.docx微信小程序申请模板-电商平台对用户交易纠纷处理的机制或方案.docx微信小程序申请...
微信小程序----导航栏透明渐变:采用css3的颜色值rgba,通过改变其中a的值,来实现。
微信3.1.0.41逆向-微信3.1.0.41HOOK接口(WeChatHelper3.1.0.41.dll)-MFC调用实例方法源码
微信小程序---图书管理系统 微信小程序---图书管理系统
微信小程序----五子棋:微信小程序实现五子棋人人对弈,判断输赢,悔棋功能!
原生微信小程序源码 - -二维码生成器 原生微信小程序源码 - -二维码生成器