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

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

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、