动态锻炼累积赔率

时间:2017-01-31 16:19:03

标签: php

我正在开发一个复制流行博彩网站上使用的系统的个人项目,我目前正在处理的系统部分是您的betslip中特定累加器的累积几率。

通过向您展示,我可能更容易解释,下面是我的赌注中四次投注的几率:

2.00   
2.00   
4.00   
10.00

累积赔率是通过将赔率乘以一起得出的,这意味着如果我在上述所有四个投注中获胜,那么我会投注一个值,比如10个积分用于返回160x我的赌注(2 x 2 x 4 x 10)。

如果我要对上述赌注设置“三倍”赌注,我现在需要弄清楚赔率。为了获得回报,我只需要赢得上述三个投注,这意味着我需要做以下事情:

2 x 2 x 4 = 16   
2 x 2 x 10 = 40   
2 x 4 x 10 = 80   
2 x 4 x 10 = 80   

这是四个单独的赌注,所以我现在的10个学分的赌注变成了40个学分,因为我将在上述每一个中获得10个学分。

最好的情况是所有上述投注都获胜,这将使我获得216x我的赌注(16 + 40 + 80 + 80)。

下一部分是我坚持的部分,如果我要解决'双打':

2 x 2 = 4   
2 x 4 = 8   
2 x 10 = 20   
2 x 4 = 8   
2 x 10 = 20   
4 x 10 = 40

我知道累积的赔率是100,但是我很难用PHP写这个,我也把我的代码膨胀到现在我对它不满意的一点,我知道可能有一个这样做的简单方法,但我似乎无法弄明白。

我的代码中提供的信息是赔率的数组和变量中的“倍数”,例如:对于高音我有3号,对于双打我有2号。这需要是动态的,因此高达20倍的赌注(在betslip中下注20次)将能够获得他们的双倍,三倍,四 - 折叠,五倍,等等。

$multiple = 2; 

/*
    $multiple is equal to 2, which indicates that I need to return the doubles odds.
    This number could be any number up to 19 & never higher than count($odds).
*/

$odds = array(
    2.00, 
    2.00, 
    4.00, 
    10.00 
);

/*
    This array is will be passed as an argument in my function.
    It will contain up to 20 different odds.
*/

if($multiple < count($odds)) {

    /*
        This is where I need to work out the accumulative odds of doubles, trebles etc dynamically.

        If correct, code should return:
        100 for doubles
        216 for trebles

        It should also have the ability to return the odds of:
        four-folds from up to 20 bets
        five-folds up to 20 bets
        etc..
    */

} else {

    foreach($betOdds as $key => $betOdd) {
        ($odds == 0.00 ? $odds = $betOdd : $odds *= $betOdd);
    }

}

return $odds;

我也知道我可能没有很好地解释这一点,所以请随时询问任何澄清。

1 个答案:

答案 0 :(得分:1)

您需要的是什么叫&#34;组合&#34;在数学方面。这样的问题has already been asked,但提供的答案告诉我们如何在字符串中组合数字。这是阵列版本:

(注意:我会使用26410让我的例子更具可读性。

class Combinations implements Iterator
{
    protected $c = null;
    protected $s = null;
    protected $n = 0;
    protected $k = 0;
    protected $pos = 0;

    function __construct($s, $k) {
        if(is_array($s)) {
            $this->s = array_values($s);
            $this->n = count($this->s);
        } else {
            $this->s = (string) $s;
            $this->n = strlen($this->s);
        }
        $this->k = $k;
        $this->rewind();
    }
    function key() {
        return $this->pos;
    }
    function current() {
        $r = array();
        for($i = 0; $i < $this->k; $i++)
            $r[] = $this->s[$this->c[$i]];
        return is_array($this->s) ? $r : implode('', $r);
    }
    function next() {
        if($this->_next())
            $this->pos++;
        else
            $this->pos = -1;
    }
    function rewind() {
        $this->c = range(0, $this->k);
        $this->pos = 0;
    }
    function valid() {
        return $this->pos >= 0;
    }

    protected function _next() {
        $i = $this->k - 1;
        while ($i >= 0 && $this->c[$i] == $this->n - $this->k + $i)
            $i--;
        if($i < 0)
            return false;
        $this->c[$i]++;
        while($i++ < $this->k - 1)
            $this->c[$i] = $this->c[$i - 1] + 1;
        return true;
    }
}

现在,如果你运行以下循环:

foreach(new Combinations(["2", "6", "4", "10"], 3) as $combination)
{
    var_dump($combination);
}

你会得到理想的结果:

array(3) {
  [0]=>
  string(1) "2"
  [1]=>
  string(1) "6"
  [2]=>
  string(1) "4"
}
array(3) {
  [0]=>
  string(1) "2"
  [1]=>
  string(1) "6"
  [2]=>
  string(2) "10"
}
array(3) {
  [0]=>
  string(1) "2"
  [1]=>
  string(1) "4"
  [2]=>
  string(2) "10"
}
array(3) {
  [0]=>
  string(1) "6"
  [1]=>
  string(1) "4"
  [2]=>
  string(2) "10"
}

或者,您可以立即获得结果数组元素的乘积:

foreach(new Combinations(["2", "6", "4", "10"], 3) as $combination)
{
    var_dump(array_product($combination));
}

这将产生以下结果:

int(48) // because 2 * 6 * 4 = 48 
int(120) // because 2 * 6 * 10 = 120
int(80) // because 2 * 4 * 10 = 80
int(240) // because 6 * 4 * 10 = 240