发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分? http://my.oschina.net/vincentzhao/blog/714732
思路如下:
在每次分配红包的时候,先计算可以分配的钱,然后根据人数得到可以分配的最大钱数和最小钱数即可。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import java.util.Random; /** * Vincent 创建于 2016/7/19. */ public class Test1 { //分几个红包 static int num = 10; //一共多少钱 static int money = 100; //每个人最少得多少 static int min = 6; //每个人最多得多少 static int max = 12; static int[] array = new int[num]; public static void main(String[] args) { Random random = new Random(); for (int i = 0; i < num; i++) { int[] calculateMaxMin = calculateMaxMin(i); int num = random.nextInt(calculateMaxMin[1] - calculateMaxMin[0] + 1) + calculateMaxMin[0]; array[i] = num; } int sum=0; for (int i : array) { System.out.println(i); sum+=i; } System.out.println("sum="+sum); } private static int[] calculateMaxMin(int currentIndex) { int[] range = new int[2]; int sum = 0; for (int i = 0; i < currentIndex; i++) { sum += array[i]; } //剩余可以分配的钱 int remainMoney = money - sum; //剩余可以分配的人数 int remainNum = num - currentIndex; if (remainNum <= 1) { range[0] = remainMoney; range[1] = remainMoney; return range; } //本次分配红包的最大金额 int tempMax = remainMoney - remainNum * min + min; if (tempMax >= max) { tempMax = max; } //本次分配红包的最小金额 int tempMin = remainMoney - (remainNum - 1) * max; if (tempMin <= min) { tempMin = min; } range[1] = tempMax; range[0] = tempMin; return range; } } |
输出结果:
1 2 3 4 5 6 7 8 9 10 11 |
7 8 12 8 8 11 11 12 12 11 sum=100 |