100的红包7个人随机分,限制值在10-30之间

2024-08-23 18:32

本文主要是介绍100的红包7个人随机分,限制值在10-30之间,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

public class RedPacketTest {public static void main(String[] args) {for (int i = 0; i < 5; i++) {splitRedPacket(100.00, 7, 10.0, 30.0);}}/*** 每个数由最小值加上随机数,每次生成随机数由剩余的数减去随机数** @param total      总和* @param splitCount 分割的个数* @param min        最小值* @param max        最大值*/public static void splitRedPacket1(Double total, int splitCount, Double min, Double max) {Double left = Double.parseDouble("" + (total - splitCount * min));Random random = new Random();DecimalFormat dcmFmt = new DecimalFormat("0.00");Double num;ArrayList<Double> list = new ArrayList<>();do {num = random.nextFloat() * left;if (num < max - min && num > 0) {//在差值之间splitCount--;if (splitCount == 0) {num = left;}list.add(Double.parseDouble(dcmFmt.format(num + min)));left = Double.parseDouble(dcmFmt.format(left - num));}} while (splitCount != 0);//随机排序Collections.shuffle(list);System.out.println(Arrays.toString(list.toArray()));Double sum = 0.0;for (double x : list) {sum = sum + x;}System.out.println("验证总和:" + dcmFmt.format(sum));}/*** 判断个数奇偶,奇数先生成一个,剩下的配对,求出各队的总和,先随机生成一个,后由总数减去随机数** @param total* @param splitCount* @param min* @param max*/public static void splitRedPacket(Double total, int splitCount, Double min, Double max) {ArrayList<Double> al = new ArrayList<>();Random random = new Random();DecimalFormat dcmFmt = new DecimalFormat("0.00");// 奇数个红包,需要单独将其中一个红包先生成,以保证后续算法拆分份数为偶数。if ((splitCount & 1) == 1) {Double num = 0.0;do {num = random.nextDouble() * max;} while (num >= max || num <= min);total = Double.parseDouble(dcmFmt.format(total - num));al.add(Double.parseDouble(dcmFmt.format(num)));}int couples = splitCount >> 1;Double perCoupleSum = total / couples;perCoupleSum = Double.parseDouble(dcmFmt.format(perCoupleSum));for (int i = 0; i < couples; i++) {Double num1 = 0.0;Double num2 = 0.0;do {num1 = random.nextDouble() * max;num2 = Double.parseDouble(dcmFmt.format(perCoupleSum - num1));if (!al.contains(num1) && !al.contains(num2)) {if (i == 0) {num1 = (total - couples * perCoupleSum) + num1;}}} while (num1 < min || num1 > max || num2 < min || num2 > max);al.add(Double.parseDouble(dcmFmt.format(num1)));al.add(Double.parseDouble(dcmFmt.format(num2)));}System.out.println("------------" + Arrays.toString(al.toArray()));Double check_num = 0.0;for (Double x : al) {check_num = check_num + x;}System.out.println("验证总和:" + dcmFmt.format(check_num));}}

 

这篇关于100的红包7个人随机分,限制值在10-30之间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100169

相关文章

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作