package redpacket;

import java.util.Random;

public class RedPacket {

    public static void main(String[] args) {
        //70个平均数为5000的数组;简化为求范围为0-2000的平均数为1000的70个数
        int n = 70;
        int[] array = new int[n];
        int avr = 1000;//平均数
        int sum = avr*70;
        Random rnd = new Random();
        int x = rnd.nextInt(2000);//第一次直接以平均数1000的2倍来取随机数
        sum-=x;//剩余和
        array[0] = x+4000;
        System.out.print(array[0]+",");
        for(int i=1;i<array.length-1;i++) {
            int a = sum/(array.length-i);//当前剩余平均
            if(a<=1000) {
                //剩余平均小于等于1000时,范围取0到2*a
                x = rnd.nextInt(2*a);
            }else if(a>1000){
                //剩余平均大于于1000时,范围取(a-1000)*2到2000
                x = rnd.nextInt(2000-(a-1000)*2)+(a-1000)*2;
            }
            sum-=x;
            array[i] = x+4000;
            System.out.print(array[i]+",");
            if(i>1&&(i+1)%10==0) {
                System.out.println();
            }
        }
        array[array.length-1]=sum+4000;//剩余和只剩一个,即为数组最后一位
        System.out.println(array[array.length-1]);
        //验证
        int total=0;
        for(int i=0;i<array.length;i++) {
            total+=array[i];
            if(array[i]<4000||array[i]>6000) {
                System.err.println(false);
            }
        }
        System.out.println("total:"+total);
    }

}

剩余平均数<=1000则取小,剩余平均数>1000则取大,保证剩余平均数很接近1000,这样前边69个数为随机,第70个数也不会溢界(4000-6000)
 

 

posted on 2017-12-04 23:04  新城旧雨  阅读(644)  评论(0编辑  收藏  举报