文档章节

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

清尘V
 清尘V
发布于 2016/07/19 21:50
字数 317
阅读 484
收藏 6

思路如下:

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

代码如下:

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

 

© 著作权归作者所有

清尘V

清尘V

粉丝 41
博文 107
码字总数 47780
作品 0
青岛
程序员
私信 提问
特殊红包需求js代码实现

需求: 见摘要 思路: 既然最少要6块钱,那就先给每人发600分,还剩下4000分。创建相关数组: 剩下4000分怎么分呢? 开始给10个从头添加呗,万一添加的过多怎么办呢 ?限制最多不能超过啊?如...

王景华
2016/07/28
50
0
微信红包的随机算法是怎样实现的?

摘自知乎 ,答案来自:https://www.zhihu.com/question/22625187/answer/85530416 答案来自:https://www.zhihu.com/question/22625187/answer/85530416 有人问过微信的人,大致是这样: 先上...

北极之北
2016/02/23
2.1K
3
微信红包的随机算法

有人问过微信的人,大致是这样: public static double getRandomMoney(LeftMoneyPackage _leftMoneyPackage) { // remainSize 剩余的红包数量 // remainMoney 剩余的钱 if (_leftMoneyPack......

背锅侠
2016/02/17
566
0
火了!清华博士发现微信抢最大红包秘笈!为此他发了2亿个红包

不想吸雾霾, 他发明出了会刮风的帽子; 懒得自己走路, 他用一堆玩具组成了“微信运动作弊器”; 听说香蕉和枣一起吃的味道很恶心, 他就通过无数次的实验, 最终搭配出了最恶心的吃法; 这...

zw0pi8g5c1x
2017/12/12
0
0
『学概念找员外』比特币之未消费的交易输出(UTXO)

来历 恨啊,这个拗口的词,害的员外一直理解不了这是个什么意思。好在员外不懈的努力下今天终于理解了个七七八八了,原来这个未消费的交易输出就是别人支付给了你,而你还没有花出去的钱。是...

刘飞_007
2018/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

八、RabbitMQ的集群原理

集群架构 写在前面 RabbitMQ集群是按照低延迟环境设计的,千万不要跨越WAN或者互联网来搭建RabbitMQ集群。如果一定要在高延迟环境下使用RabbitMQ集群,可以参考使用Shovel和Federation工具。...

XuePeng77
今天
1
0
mac系统下,brew 安装mysql,用终端可以连接,navicat却连接不上?

问题: 1.报错? 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found 2.自己通过设置,已经把密......

写bug的攻城狮
昨天
2
0
老生常谈,HashMap的死循环

问题 最近的几次面试中,我都问了是否了解HashMap在并发使用时可能发生死循环,导致cpu100%,结果让我很意外,都表示不知道有这样的问题,让我意外的是面试者的工作年限都不短。 由于HashMap...

群星纪元
昨天
5
0
拉普拉斯算子

拉普拉斯算子是二阶微分算子。 我们知道,一维离散信号一阶微分公式如下: 相应的,一维离散信号二阶微分公式如下: 由于图像有x和y两个方向,因此图像信号属于二维离散信号。其在x,y两个...

yepanl
昨天
3
0
记录"正则表达式"

详细请查看我的博客:https://blog.enjoytoshare.club/article/RegularExpression.html 1 写在前面 正则表达式(Regular Expression)在代码中常常简写为regex。正则表达式通常被用来检索、替...

wugenqiang
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部