微信发红包规则
第一种,单独给某个好友发红包:0 < 金额 <= 200,金额支持两位小数
第二种,群红包,有以下三种类型:
1) 拼手气红包:1 <= 红包个数 <= 当前群聊人数,0 < 总金额 <= 200, 金额支持两位小数
2) 普通红包:1 <= 红包个数 <= 当前群聊人数,0 < 单个金额 <= 200, 金额支持两位小数
3) 专属红包:发给群聊中特定的某个人,0 < 金额 <= 200, 金额支持两位小数
我们要写的是拼手气红包的算法,先来看下业务上的场景,如下图所示:
输入:红包个数N、总金额S
输出:随机生成的N个红包金额值
其中输出需要满足这三个条件:N个红包金额值具备随机性、N个红包金额相加的和=总金额S、金额支持两位小数
我的思路是:
在for循环中使用random函数随机生成一个金额值,将生成的金额值存放到一个列表中,因为每次生成的金额值都必须要小于可用的总金额,所以我们需要在每次随机生成一个金额值后,就用总金额减去已经生成的金额值的和,计算出剩下的金额,所以每次生成的随机数的范围应该满足:0.01 <= 随机金额值 < 总金额-已经生成的金额之和,循环N-1次后,最后一个红包金额值用减法计算
完整代码如下:
运行结果如下: