PHP自定义概率的方法(原创)
来源:互联网 发布:手机移动数据自动开启 编辑:程序博客网 时间:2024/05/20 20:48
概述:
经历一周赶项目,终于项目上线之后就闲下来。突然今天回想起之前一次面试的有趣的面试题——“你处理转盘抽奖自定义概率有什么好的思路?”当年太年轻了,只是说到公倍数,含含糊糊的回答让面试官不太满意。如今,想起了,理清思路发现也不困难,在此分享一下做法。
准备:
主要的抽奖逻辑是抽取随机数来进行抽奖,同时用区间的不同来代表不同的奖项。该注释的地方都注释了,如果还是看不懂的读者可以私下问我。(注意:方法中echo出来的只是为了方便测试方法运行的过程来方便读者理解,自行修改删去就好。)
分析:
主要代码:
/** * 修改自义定概率抽奖算法 * @param $coupon_list = array('prize_name1' => 'probability1','prize_name2'=>'probability2','prize_name3'=>'probability3',……) * @return prize_name */ public function lotter_test($coupon_list=array('a' => '1/3','b'=>'1/5','c'=>'1/8')) { //第一部分为处理输入的奖项概率数组 foreach($coupon_list as $name=>$value){ $exp = explode("/",$value); //分隔分数 $numerator[$name] = $exp[0]; //分子 $denominator[$name] = $exp[1]; //分母 } $common_multiple = 1; //初定义公倍数 foreach($denominator as $value){ $common_multiple *= $value; //计算公倍数 } foreach($denominator as $name=>$value){ $new_list[$name] = $common_multiple/$value*$numerator[$name];//获得每一个奖项分别占公倍数的多少份 } $count = array_sum($new_list); //补充其他情况(各奖项总概率为100%) $other = $common_multiple - $count;//得出数组中的其他情况占公倍数的多少份 $new_list = array_merge($new_list,array('other' => $other)); //添加其他情况到数组中 //第二部分为抽取随机数来进行抽奖 $luck_num = mt_rand(0, $common_multiple); echo 'luck_num='. $luck_num; echo '</br>'; $_counter = 0; foreach($new_list as $name => $value) { $_counter += $value; echo '$_counter='. $_counter; echo '$name='. $name; if ($luck_num <= $_counter) { return $name; } echo '</br>'; } }
测试部分:
public function test11(){ $arr =array('a'=>'1/9999','b'=>'1/888','c'=>'1/3'); echo '</br>The result is ' . $this ->lotter_test($arr); }
测试返回的结果:
luck_num=7403940$_counter=2664$name=a$_counter=32661$name=b$_counter=8911773$name=cThe result is c
0 0
- PHP自定义概率的方法(原创)
- 【原创】PHP自定义标签
- (原创)安卓自定义shape方法
- PHP中游戏随机概率方法(兼容小数点权重)
- php计算抽奖的概率
- php计算抽奖的概率
- php自定义大小验证码的方法
- php:自定义的格式化时间方法
- windows下提高效率的方法(原创)
- php几个常用的概率算法(抽奖、广告首选)
- php几个常用的概率算法(抽奖、广告首选)
- php几个常用的概率算法(抽奖、广告首选)
- php 常用自定义方法
- 自定义控件中使用枚举类型的属性(原创)
- 自定义控件中使用枚举类型的属性(原创)
- 可选择也可自定义的输入框实现(原创)
- (原创)分享一个自定义的tablayout组件
- (原创)分享一个自定义的简单Retrofit下载工具
- [iOS UItableView 自定义Section] 自定义Section 修改title样式
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Spring mvc 自定义时间转换器
- textArea没有value 属性 如何显示
- 多线程--原子类理解
- PHP自定义概率的方法(原创)
- 如何将数据转换libsvm格式文件
- 算法分析——Hanoi塔问题(还是写不出来啊!)
- AAAAAAA
- CI框架源码解析十三之语言类文件Lang.php
- VC获取当前运行目录
- 八大排序学习之一冒泡排序
- ViewPager +Fragment 中Fragment被预加载问题(ViewPager中Fragment的生命周期管理)
- Sharding