java抢红包线段分割法_抢红包算法——线段分割法
抢红包算法经常在面试的时候被问到,那么今天我就给大家分享一个比较常用容易理解的算法,线段分割法的实现。
算法思路:
线段分割法就是把红包总金额想象成一条线段,而每个人抢到的金额,则是这条主线段所拆分出的子线段。
当N个人一起抢红包的时候,就需要确定N-1个切割点。
因此,当N个人一起抢总金额为M的红包时,我们需要做N-1次随机运算,以此确定N-1个切割点。
随机的范围区间是(1, M)。当所有切割点确定以后,子线段的长度也随之确定。这样每个人来抢红包的时候,只需要顺次领取与子线段长度等价的红包金额即可。
需要注意:
1、每个人最低也要抢到1分钱,要保证不能抢到0元的情况;
php代码实现:
$num = 4; //红包个数
$money = 100; //红包钱数100元
$money_fen = $money * 100; //元转换成分
//从1至总金额*100中,随机取4-1个随机数
$i = 1;
$rand = [];
while ($i < $num)
{
//$money_fen需要减1 不然最后一个人可能抢到0元
$rand_num = mt_rand(1,$money_fen-1);
//如果已经存在该随机数不保存,主要解决抢到0元的情况
if(!in_array($rand_num,$rand,true))
{
$rand[] = $rand_num;
$i+=1;
}
}
//从小到大排序
sort($rand);
//中奖结果
$result = [];
foreach ($rand as $key =>$value)
{
if($key == 0)
{
$result[] = $value;
}
else
{
$result[] = $value - $rand[$key - 1];
}
}
//最后一个人的中奖结果
$result[] = $money_fen - $rand[count($rand) - 1];
//转化成元
foreach ($result as $key=>$value)
{
$result[$key] = $value / 100;
}
print_r($result);
java抢红包线段分割法_抢红包算法——线段分割法相关推荐
- java中驼峰编码,驼峰式命名法_小驼峰式命名法编程_java中getter和setter
人们交流靠各种语言,每行都有每行的所谓的"行话".程序员也不例外,众所周知,程序员都是用代码进行交流的.那么除了在代码中的注释之外, 程序员如何读懂别人的程序呢? 当然,程序员之间 ...
- 分油问题回朔法c语言算法,用回溯法求“韩信分油”问题所有解
裴南平 摘要:回溯法是一种常用的计算机程序设计方法.使用回溯法解决"韩信分油问题"也称"泊松分酒问题",在算法中保存每一步执行的中间结果,程序扩展前,判斷程序是 ...
- c语言线段树建树程序,C++算法 线段树
线段树这个算法,看起来非常高端,而且很有用处,所以还是讲一下下吧. 温馨提示:写线段树前请做好写码5分钟,调试一辈子的准备^-^ 啊直接步入正题-- 首先我们考虑一个题目:有一个序列,要做到单点修改单 ...
- sql相同顺序法和一次封锁法_数学专题 | Ep01 隔板法的妙用
数学专题(一) 隔板法的妙用 浓度常见哪些问题? 排列组合分堆?涂色?到底掌握透彻了吗? 解析几何与韦达定理? 公式总是记不住?应用题还不会解? 除了写作(写作听我的).逻辑(逻辑说)专题外,本周起 ...
- java 穷举法求水仙花数_常用算法-穷举法
穷举法又称为枚举法,它是在计算机算法设计中用得最多的一种编程思想.它的实现方式是:在已知答案范围的情况下,依次地枚举该范围内所有的取值,并对每个取值进行考查,确定是否满足条件.经过循环遍历之后,筛选出 ...
- java通过比较大小排序_排序算法的比较与java实现
冒泡排序 基本思想: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上 ...
- java每轮排序结果_【算法队列面试题】面试问题:java选择题… - 看准网
1.ArrayList类的底层数据结构是( ) A.数组结构 B.链表结构 C.哈希表结构 D.红黑树结构 2.LinkedList类的特点是( ) A.查询快 B.增删快 C.元素不重复 D.元 ...
- 最大公约数算法_更相减损法_辗转相除法(即欧几里得算法)
package algorithm;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- java零钱换整程序_贪心算法换零钱(java)
贪心算法思想 贪心算法总是做出在当前看来做好的选择.也就是说贪心算法并不从整体最后考虑,他做出的选择只是局部最优选择.他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解, ...
最新文章
- 动画 Interpolator
- 【AC Saber】数据结构
- SAP Spartacus home 页面的 cx-page-slot selector
- 硬件:电脑基础进阶必学知识,详解电脑主板跳线!
- 转:VC6.0与VC.net的具体区别
- php 标签库,PHP.MVC的模板标签系统之模板标签库
- linux查找、搜索字符或文件
- 软件开发从需求分析开始
- skywalking mysql配置_skywalking 配置和使用(windows)
- 远程连接ubuntu的MongoDB遇到的坑
- 惊!微信可以转发语音了?!
- APP开发接口分类介绍
- VS2010使用c++、gSOAP创建WebService 图文教程
- 自动驾驶(二十)---------Waymo数据集
- 考研复试数据库原理课后习题(七)——数据库设计
- Evasion Attack in Adversarial Machine Learning
- 超长内容自动显示省略号
- 海思SDK学习(11)海思媒体处理软件平台MMP(10)VGS视频图形子系统
- LaTex论文排版 | (30) 三线表
- 多源异构数据整合在多规合一中的应用