生成一组(70个)平均数固定5000,限制范围4000-6000的随机数,类似简易红包算法,且有范围限制...

 
   
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)
 

 

转载于:https://www.cnblogs.com/xcjy/p/RedPacket.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值