百度作业帮 生成随机红包算法
来源:互联网 发布:知乎一小时全集 mobi 编辑:程序博客网 时间:2024/05/16 05:12
今天面到的算法题挺有意思,是要我写一个randomSplit()函数,传入的变量有待分的正整数m,要分的份数n,最小值min_val,最大值max_val;将m分成最大值和最小值之间的n个随机数
这其实就是一个随机分红包的问题,这个思路就是要注意这n部分要一份一分的分开生成,我们需要确定的就是每一份的上下限是什么。
上限:math.min{max-val,m - (n - ni)*min_val} ;ni指前边已经产生i个数,
下限:math.max{min-val,m - (n - ni)*max_val};
利用random()方法生成随机数
在Math类中,Java语言提供了一个random的方法,通过这个方法可以让系统产生随机数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,但是只要对这个方法进行一些灵活的处理,就可以获取任意范围的随机数。
如我们可以先通过random方法生成一个随机数,然后将结果乘以10。此时产生的随机数字即为大于等于0小于10的数字。然后再利用Int方法进行转换(它会去掉小数掉后面的数字,即只获取整数部分,不是四舍五入)。最后即可获取一个0到9的整数型随机数字。即对原有的random方法进行如下的变型:(int)(Math.Random()*10)即可。我们还可以对这个方法进行扩展,让其产生任意范围内的随机数。如需要产生[0,n)范围内的随机数,则可改为(int)(Math.Random()*n)即可。此时应用程序就会产生一个大于等于0小于n之间的随机数。如将n设置为5,那么其就会产生一个0到5之间的整数型的随机数。
这样只适用于从0开始的区间范围,如果起始区间不为0,如区间[min,max],用上面提到的变型不足以得出,可用变型:
(int)(min+Math.random()*(max-min+1))
还有一个就是要做异常处理
public static int [] randomSplit(int n, int m ,int min_val, int max_val){int [] result = new int [m];if(n <= 0 || m <= 0 || (n / m) < min_val || (n/m) > max_val){return result;}for(int i = 0; i < m - 1; i++){int min = Math.max(min_val, n - (m - (i+1))*max_val);int max = Math.min(max_val, n - (m - (i+1))*min_val);int random = min + (int)(Math.random() * (max - min) + 1);result[i] = random;n = n - random;}result[m-1] = n;return result;}
- 百度作业帮 生成随机红包算法
- 随机红包生成算法-python实现
- python 实现红包随机生成算法
- 红包随机算法
- 随机红包算法
- 微信红包随机生成算法(PHP版)
- 微信红包随机生成算法(PHP版)
- [算法] -- php固定红包 + 随机红包算法
- php固定红包 + 随机红包算法
- 百度作业帮一面总结
- 微信随机红包算法
- 生成红包算法
- 红包生成算法
- 抢红包的红包生成算法
- 抢红包的红包生成算法
- 抢红包的红包生成算法
- 抢红包的红包生成算法
- 红包随机金额生成的方法
- 2017上海金马五校程序设计竞赛部分题解
- linux下误操作startx命令后,在登录界面进不去解决办法
- 【工作流】Jbpm(一)——认识jbpm
- LeetCode#19. Remove Nth Node From End of List
- 将Eclipse中的Web项目部署到Tomcat
- 百度作业帮 生成随机红包算法
- hadoop 常见问题
- ConcurrentHashMap源码分析_JDK1.8版本
- 移动生活
- 给初学者的 RxJava2.0 教程 (九)
- DNS服务器配置和测试
- H5小白入门笔记(1)
- 网络爬虫程序(Java实现)
- Python中使用支持向量机(SVM)实践