前段时间做了一个笔试题,觉得很有意思,特此记录下来。 题目如下 //题目:请编写一个红包随机算法。需求为:给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。 //比如100元的红包,10个人抢,每人分得一些金额。 //约束条件为,最佳手气金额不能超过最大金额的90%,每人都有 ...
前段时间做了一个笔试题,觉得很有意思,特此记录下来。 题目如下 //题目:请编写一个红包随机算法。需求为:给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。 //比如100元的红包,10个人抢,每人分得一些金额。 //约束条件为,最佳手气金额不能超过最大金额的90%,每人都有 ...
name="totalMoney">总金额</param> /// ...
需要考虑几个点: 红包形成的队列不应该是从小到大或者从大到小,需要有大小的随机性。 红包这种金钱类的需要用Decimal保证精确度。 考虑红包分到每个人手上的最小的最大的情况。 下面是利用线段分割算法实现的分红包, 比如把100元红包,分给十个人 ...
发一个红包,要让若干人来抢,需要满足哪些规则? 1、所有人抢到的金额等于总金额,不能超过,也不能少于。 2、每个人至少抢到大于0的金额; 3、保证每个人抢到金额的几率相等。比如A 抢到10元的几率是20,B,C抢到的金额为10的几率也是20。 本题有金额限制,每个人的金额至少是10,所以不满足 ...
...
场景: 生成10个随机红包, 奖池总金额10000, 最小500, 最大1000,奖池全部分配完。 分析: 第一想法简单, 直接生成500-1000之间的随机数,直接生成10个, 直接上代码。这种写法的问题在于最后一个金额生成的时候会出现问题,会有出现超过最大金额的可能性 ...
2017年1月14日 14:19:14 星期六 一, 整体设计 算法有很多种, 可以自行选择, 主要的"架构" 是这样的, 用redis decr()命令去限流, 用mysql去记录各种需要的数据 二, 红包算法 简便起见, 红包金额用整数表示, 假设每个红包里边有x个糖豆, 每个人最少 ...
public class hongbao { @Test public void testHongbao(){ hb(100, 100, 0.01);//金额,个数,最少值 } void hb(double total,int num,double min ...