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

相关文章

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文