这是一个红包生成算法的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