红包生成算法

这篇博客介绍了如何使用Java实现红包生成算法。通过让红包两两之间交换随机数,确保总金额不变,最终达到随机分配的效果。每次交换的随机数范围在0到平均值之间,确保平均分配。经过9次交换,10个红包的金额会均匀分布。
摘要由CSDN通过智能技术生成

这是一个红包生成算法的java程序,其原理是这样的.我们假设红包的总金额是10元,纷发次数是10次,那么平均每一个人得到的就是1元,这个大家都是知道的,然后让这十个红包两两之间交换一个随机数,该随机数的绝对值大于等于0,小于平均数,每次交换的数字可能是正数,也可能是负数,这样十个红包总共需要交换9次即可.假设红包1与红包2随机交换的数字是r1,则红包1加上r1,红包2减去r1;假设红包2和红包3随机交换的数是r2,则红包2加上r2,红包3减去r2....以此类推,下面是该算法的实现:

package com.redPackage;

import java.text.DecimalFormat;

public class RedPackage {
	
	//总金额(元)
	static double total=10D;
	//纷发的个数
	static int num=10;
	//将总金额进行平分
	static double averageMoney=(total/num);
	//随机的添加/减去数组
	static int[] arr={1,-1};
	//格式化方法
	static DecimalFormat df= new DecimalFormat("######0.00");
	
	//是添加还是减去,该可能性要随机产生
	public static int getIntend(){
		int aa=(int) (Math.random()*arr.length);
		return arr[aa];
	}
	
	//生成num个红包的数组
	public static double[] getAveragePackage(double total,int num){
		double[] arr2=new double[num];
		//将其装入arr2数组中,共装入num-1个.
		for(int i=0;i<num;i++){
			arr2[i]=ave
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值