今天面到的算法题挺有意思,是要我写一个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;}

百度作业帮 生成随机红包算法相关推荐

  1. php固定红包 + 随机红包算法

    1 需求 CleverCode最近接到一个需求,需要写一个固定红包 + 随机红包算法. 1 固定红包就是每个红包金额一样,有多少个就发多少个固定红包金额就行. 2 随机红包的需求是.比如红包总金额5元 ...

  2. 百度“作业帮”App为何会获易观创新应用大奖?

    2014易观互联网创新大会在深圳隆重举行,作为中国科技行业最大的信息产品提供者,易观国际围绕"创新制胜"的主题颁发2014"易观之星"大奖,而百度"作 ...

  3. 作业帮计算机三角函数,【三角函数公式大全】百度作业帮

    [三角函数公式大全]百度作业帮 2019-01-07 倒数关系: tanα ·cotα=1 sinα ·cscα=1 cosα ·secα=1 商的关系: sinα/cosα=tanα=secα/cs ...

  4. PHP实现微信随机红包算法和微信红包的架构设计简介

    微信红包的架构设计简介: 原文:https://www.zybuluo.com/yulin718/note/93148 @来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微 ...

  5. 百度作业帮-产品分析

    一.商业模式分析 1.1.问答时期(2014年2月-2015年1月) 商业模式之作业帮V1.0.png 两点值得注意: 作业帮的出现有明显的历史原因,即由百度知道团队出品,因此切入K12教育初期,采取 ...

  6. python随机红包怎么发_python生成随机红包的实例写法

    假设红包金额为money,数量是num,并且红包金额money>=num*0.01 原理如下,从1~money*100的数的集合中,随机抽取num-1个数,然后对这些数进行排序,在排序后的集合前 ...

  7. 计算数的位数c语言 百度作业帮,C语言多位数计算

    C语言 怎么求出一个多位数 每位的数字? inta=0;inti=0;intb[10]={0};//存放解析后的数字scanf("%d"&a);for(i=0;;i++){ ...

  8. 极限中0除以常数_基本不等式中常用公式百度作业帮

    1. 基本不等式中常用公式 基本不等式中常用公式: (1)√((a²+b²)/2)≥(a+b)/2≥√ab≥2/(1/a+1/b).(当且仅当a=b时,等号成立) (2)√(ab)≤(a+b)/2.( ...

  9. 作业帮php面试,百度作业帮面试总结

    2017年9月11日 14:00开始面试 总体来说,面试的难度偏难,先梳理一下面试的知识点(可能不够全面,想到哪写到哪) 一面: 1.简述MVC.(把MVC的流程要说清楚) 2.ThinkPHP缓存原 ...

最新文章

  1. 科研成果汇总:收获的季节
  2. 【svn】svn的使用
  3. iOS SQLite函数总结
  4. POJ2155 - Matrix(二维树状数组)
  5. Java命令学习系列(一)——Jps
  6. 公里与英里的换算c语言函数_60迈=60码=60公里?这三者天壤之别,可别搞错了
  7. 后缀数组 TYVJ P1860 后缀数组
  8. 虚拟机服务器拒绝密码,Xshell连接不上虚拟机连接提示SSH服务器拒绝了密码,请再试一次...
  9. .Net Core DI,如何在程序集中注册所有现有的可分配类型
  10. java界面编程 pdf_java – PDF页面使用itext重新排序
  11. JavaScript学习(十六)—实现购物车加减数量,计算总金额
  12. go使用mongodb
  13. 如何做到项目准时交付之需求管理
  14. JavaScript封装拖动滑块验证
  15. Photoshop-RGB色彩模式
  16. Vmware workstation 16pro解锁装MacOS
  17. 近而立之年了,老程序员如何建立自己的护城河
  18. 支付对接常用:关于asp rsa加密
  19. 大写字母转小写(及scanf中的间隔符号的影响)
  20. 将安卓手机屏幕内容投射到电脑屏幕上

热门文章

  1. DeepDB:Learn From Data,not from Queries 解读
  2. 另辟蹊径,阿里从业务切入移动安全
  3. 安卓篇--模拟器加载自己编译的内核
  4. Android触摸屏驱动屏幕翻转
  5. Cotex-M MSP和PSP 指针
  6. 2013年第4季度床垫品牌网络知名度排名
  7. java报错symbol_定义报错cannot find symbol
  8. java开源 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城
  9. PPAPI插件的绘图与输入事件处理
  10. 防火墙双机设备(旁挂组网),HRP双主原因