/*

 * 经典的概率算法,

 * $proArr是一个预先设置的数组,

 * 假设数组为:array(100,200,300,400),

 * 开始是从1,1000 这个概率范围内筛选第一个数是否在他的出现概率范围之内,

 * 如果不在,则将概率空间,也就是k的值减去刚刚的那个数字的概率空间,

 * 在本例当中就是减去100,也就是说第二个数是在1,900这个范围内筛选的。

 * 这样 筛选到最终,总会有一个数满足要求。

 * 就相当于去一个箱子里摸东西,

 * 第一个不是,第二个不是,第三个还不是,那最后一个一定是。

 * 这个算法简单,而且效率非常 高,

 * 关键是这个算法已在我们以前的项目中有应用,尤其是大数据量的项目中效率非常棒。

 */

function get_rand($proArr) {

  $result = '';

  //概率数组的总概率精度

  $proSum = array_sum($proArr);

  //概率数组循环

  foreach ($proArr as $key => $proCur) {

    $randNum = mt_rand(1, $proSum);

    if ($randNum <= $proCur) {

      $result = $key;

      break;

    } else {

      $proSum -= $proCur;

    }

  }

  unset ($proArr);

  return $result;

}

 

 

/*

 * 奖项数组

 * 是一个二维数组,记录了所有本次抽奖的奖项信息,

 * 其中id表示中奖等级,prize表示奖品,v表示中奖概率。

 * 注意其中的v必须为整数,你可以将对应的 奖项的v设置成0,即意味着该奖项抽中的几率是0,

 * 数组中v的总和(基数),基数越大越能体现概率的准确性。

 * 本例中v的总和为100,那么平板电脑对应的 中奖概率就是1%,

 * 如果v的总和是10000,那中奖概率就是万分之一了。

 *

 */

$prize_arr = array(

  '0' => array('id'=>1,'prize'=>'平板电脑','v'=>1),

  '1' => array('id'=>2,'prize'=>'数码相机','v'=>5),

  '2' => array('id'=>3,'prize'=>'音箱设备','v'=>10),

  '3' => array('id'=>4,'prize'=>'4G优盘','v'=>12),

  '4' => array('id'=>5,'prize'=>'10Q币','v'=>22),

  '5' => array('id'=>6,'prize'=>'下次没准就能中哦','v'=>50),

);

 

/*

 * 每次前端页面的请求,PHP循环奖项设置数组,

 * 通过概率计算函数get_rand获取抽中的奖项id。

 * 将中奖奖品保存在数组$res['yes']中,

 * 而剩下的未中奖的信息保存在$res['no']中,

 * 最后输出json个数数据给前端页面。

 */

foreach ($prize_arr as $key => $val) {

  $arr[$val['id']] = $val['v'];

}

$rid = get_rand($arr); //根据概率获取奖项id

 

$res['yes'] = $prize_arr[$rid-1]['prize']; //中奖项

unset($prize_arr[$rid-1]); //将中奖项从数组中剔除,剩下未中奖项

shuffle($prize_arr); //打乱数组顺序

for($i=0;$i<count($prize_arr);$i++){

  $pr[] = $prize_arr[$i]['prize'];

}

$res['no'] = $pr;

print_r($res['yes']);

php概率的更多相关文章

  1. [bzoj2152][聪聪和可可] (点分治+概率)

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好 ...

  2. sqlserver中根据表中的配置概率取到数据

      create proc pr_zhanglei_test1 /*功能描述: 根据t_zhanglei_test1中perc设置的概率,取到相应数据old_id */ as declare @per ...

  3. 【BZOJ-3143】游走 高斯消元 + 概率期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2264  Solved: 987[Submit][Status] ...

  4. 【BZOJ-3270】博物馆 高斯消元 + 概率期望

    3270: 博物馆 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 292  Solved: 158[Submit][Status][Discuss] ...

  5. UVA1637Double Patience(概率 + 记忆化搜索)

    训练指南P327 题意:36张牌分成9堆, 每堆4张牌.每次拿走某两堆顶部的牌,但需要点数相同.如果出现多种拿法则等概率的随机拿. 如果最后拿完所有的牌则游戏成功,求成功的概率. 开个9维数组表示每一 ...

  6. caffe机器学习自带图片分类器classify.py实现输出预测结果的概率及caffe的web_demo例子运行实例

    caffe机器学习环境搭建及python接口编译参见我的上一篇博客:机器学习caffe环境搭建--redhat7.1和caffe的python接口编译 1.运行caffe图片分类器python接口 还 ...

  7. 【BZOJ1415】 [Noi2005]聪聪和可可 概率与期望

    其实题不难,不知提交了几次...不能代码MD...注意一些基本问题...SB概率题 #include <iostream> #include <cstdio> #include ...

  8. 【BZOJ3036】绿豆蛙的归宿 概率与期望

    最水的概率期望,推荐算法合集之<浅析竞赛中一类数学期望问题的解决方法> #include <iostream> #include <cstdio> using na ...

  9. IT人生知识分享:概率与运气

    前言: 最近的人生多了些体验,也读了些许书,感觉还是有些知识是可以分享的. 今天难得周六,特意开电脑了,花几个小时写写,和大伙分享分享点知识. 以下内容,更多的需要读者思考,所以结论不会写太清晰,但一 ...

  10. UVA11021 Tribles[离散概率 DP]

    UVA - 11021 Tribles GRAVITATION, n. “The tendency of all bodies to approach one another with a stren ...

随机推荐

  1. python解压压缩包的几种方式

    这里讨论使用Python解压如下五种压缩文件: .gz .tar  .tgz .zip .rar 简介 gz: 即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tar: ...

  2. C#中ESRI.ArcGIS.esriSystem的引用问题

    ESRI.ArcGIS.esriSystem,在引用里没有它的同名引用,其实它对应的引用为ESRI.ArcGIS.System,所以添加“ESRI.ArcGIS.System”这个引用即可

  3. Python 分发包中添加额外文件【新手必学】

      在制作一个 Python 分发包时经常需要把一些文件添加到包中.最常见的例子是你希望通过 pip install命令安装 Python 包时会在 /etc/ 等目录下自动添加默认配置文件,由此可以 ...

  4. AcWing 899. 编辑距离

    #include <iostream> #include <algorithm> #include <string.h> using namespace std; ...

  5. php设计模式之面向过程实现举报功能实例代码

    html <html> <head> <meta charset="UTF-8"> <title>责任链模式</title&g ...

  6. MyEcplise中编码格式的修改问题

    1.如果是在Run Configurations中修改编码格式的话,只能是修改当前java文件的编码格式,把改文件中的代码复制到 另一新建 的java文件中会出现异常,所以就会出现相同的代码在两个不同 ...

  7. [Luogu]小Z的AK计划

    Description Luogu2107 Solution 一开始打了一个60分的暴力DP,结果一分都没得--本地调了好久才发现是没开long long. 由于我的DP方程没有任何性质,就是一个01 ...

  8. java基础(十一)之抽象类和抽象函数

    1.抽象函数的语法特征2.抽象类的语法特征3.抽象类的作用 抽象函数 只有函数的定义,没有函数体的函数被称为抽象函数: abstract void func(); 抽象类 使用abstract定义的类 ...

  9. Java连载64-finally语法及其注意事项

    一.finally语句块 1.注意点: (1)finally语句块可以直接和try语句块联合使用.try...finally.... (2)try.....catch.....finally也可以执行 ...

  10. Mobius反演定理-BZOJ2154

    This article is made by Jason-Cow.Welcome to reprint.But please post the article's address. 莫比乌斯定理(未 ...