这是一个经典的概率算法。

现在有数组:[10, 20, 30, 40]

假设对应中奖几率:特等奖10%,一等奖20%,二等奖30%,三等奖40%,总共100%

算法开始时,从数组中选出一个值$value,再从1-100概率空间内随机选出一个数$rand

比较$value$rand,如果$rand$value概率范围之内,则直接返回$value对应的key。

如果不在,则将概率空间的值减去$value值。

在本例中,第一次判断之后,就是减去10,也就是说第二次是在1-90这个范围内筛选的。

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

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

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

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

1. PHP实现

function getRand($arr)
{
$result = '';
//概率数组的总概率精度
$sum = array_sum($arr);
//概率数组循环
foreach ($arr as $key => $value) {
$rand = mt_rand(1, $sum);
if ($rand <= $value) {
$result = $key;
break;
} else {
$sum -= $value;
}
}
unset ($arr);
return $result;
}

2. Javascript实现

<script>
function getRand(arr) {
var result = 0;
var sum = arr.reduce(function(a, b) {
return a + b;
}); for (index in arr) {
rand = Math.round(Math.random() * (sum - 1) + 1);
if (rand <= arr[index]) {
return index;
} else {
sum -= arr[index];
}
} return result;
} // 使用示例,输出2的概率最大
var a = [10, 20, 30, 40];
document.write('<br />Javascript:' + getRand(a));
</script>

PHP和JavaScript中奖概率算法的更多相关文章

  1. php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂 <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为: ...

  2. 中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)

    <?php //中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法) /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300, ...

  3. PHP大转盘中奖概率算法实例

    本文实例讲述了PHP大转盘中奖概率算法的实现方法,分享给大家供大家参考.具体如下: 大转盘是最近很多线上网动中一个比较有意思的东西了,下面我们就来看看这个大转盘中奖概率算法与例子,希望对各位有所帮助. ...

  4. php编写的抽奖程序中奖概率算法

    本文给大家分享的是php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法.用法很简单,代码里有详细注释说明,一看就懂,有需要的小伙伴参考下吧. 我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及 ...

  5. PHP+jQuery实现翻板抽奖(中奖概率算法)

    在电视节目中有一种抽奖形式暂且叫做翻板抽奖,台上有一个墙面,墙面放置几个大方块,主持人或者抽奖者翻开对应的方块即可揭晓中奖结果.类似的抽奖形式还可以应用在WEB中,本文将使用PHP+jQuery为您讲 ...

  6. 高处胜寒 php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法

    <?php /* * 经典的概率算法, * $proArr是一个预先设置的数组, * 假设数组为:array(100,200,300,400), * 开始是从1,1000 这个概率范围内筛选第一 ...

  7. php 中奖概率算法

    我们先完成后台PHP的流程,PHP的主要工作是负责配置奖项及对应的中奖概率,当前端页面点击翻动某个方块时会想后台PHP发送ajax请求,那么后台PHP根据配置的概率,通过概率算法给出中奖结果,同时将未 ...

  8. paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.

    paip.刮刮卡砸金蛋抽奖概率算法跟核心流程. #---抽奖算法需要满足的需求如下: 1 #---抽奖核心流程 1 #---问题???更好的算法 2 #---实际使用的扩展抽奖算法(带奖品送完判断和每 ...

  9. PHP概率算法---砸金蛋示例

    这是一个很经典的概率算法: function get_rand($proArr) { $result = ''; //概率数组的总概率精度 $proSum = array_sum($proArr); ...

随机推荐

  1. Android 常见内存泄露 & 解决方案

    前言 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃 (OOM) 等严重后果. 那什么情况下不能被 ...

  2. MySQL8.0 redo日志系统优化

    背景 现在主流的数据库系统的故障恢复逻辑都是基于经典的ARIES协议,也就是基于undo日志+redo日志的来进行故障恢复.redo日志是物理日志,一般采用WAL(Write-Ahead-Loggin ...

  3. CSPS模拟 53

    T1 两种差分,拆分转化 T2 状压,hash压状态卡空间 T3 dfs,分类讨论.

  4. python之装饰器的概念

    装饰器对于程序来说虽然不是必要的,但有时候却可以提高效率,也可以保证程序的安全. 说装饰器之前需要掌握闭包,前面一篇文章已经介绍过,这里不再重复. 那么,装饰器到底是什么东西呢?看下面这个例子 首先定 ...

  5. P3105 [USACO14OPEN]公平的摄影(正解是乱搞,我却二分了)(+二分答案总结)

    照例化简题意: 给定一个01区间,可以把0改成1,问其中最长的01数量相等的区间长度. 额很容易想到前缀和,把w弄成1,h弄成-1,然后求前缀和,然后乱搞就行了. 但是一直不太会乱搞的我却直接想到了二 ...

  6. mysql 备份 docker mysql备份

    #未用docker安装的 mysqldump -h192.168.1.180 -P3306 -uroot -p123456 demo0201 > bak180814.sql mysql -u用户 ...

  7. 利用DI实现级联删除 - xms跨平台基础框架 - 基于.netcore

    一.引言 所谓级联删除是指删除一条记录后,附带关联记录也一起删除,比如删除客户后,联系人也一起删除: 以往我们会依赖于数据库表的外键约束,但存在着明显的问题,增加数据库压力.提示不友好.职责越界.事务 ...

  8. C/C++企业链表的实现

    首先 先介绍企业链表 和Linux内核链表 和 之前我发的一篇单项链表的区别 结构体变量名是结构体的首地址吗? 这个问题会在待会链表实现中体现!! 答案:有些编译器 支持用结构体变量名做地址的方式但一 ...

  9. 易初大数据 2019年11月7日 spss 王庆超

    许多统计过程也都提供描述性统计指标的输出. (2)描述(D):该过程进行一般性的统计描述.它可以输出均值.均值的标准误.方差.标准差.范围(极差).最大值.最小值.峰度和偏度. (3)探索(E):该过 ...

  10. NuGet Package Explorer使用教程下载

    1.下载NuGet Package Explorer http://www.pc0359.cn/downinfo/91514.html 2.双击NuGet Package Explorer出现启动界面 ...