发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?

原创
2016/07/19 21:50
阅读数 3.5K

思路如下:

    在每次分配红包的时候,先计算可以分配的钱,然后根据人数得到可以分配的最大钱数和最小钱数即可。

代码如下:

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;
    }

}

输出结果:

7
8
12
8
8
11
11
12
12
11
sum=100

 

展开阅读全文
打赏
0
6 收藏
分享
加载中
更多评论
打赏
0 评论
6 收藏
0
分享
返回顶部
顶部