我正在开发一个复制流行博彩网站上使用的系统的个人项目,我目前正在处理的系统部分是您的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;
我也知道我可能没有很好地解释这一点,所以请随时询问任何澄清。
答案 0 :(得分:1)
您需要的是什么叫&#34;组合&#34;在数学方面。这样的问题has already been asked,但提供的答案告诉我们如何在字符串中组合数字。这是阵列版本:
(注意:我会使用2
,6
,4
和10
让我的例子更具可读性。
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