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)