PHP - 扑克算法,创建所有可能的扑克组合

时间:2016-09-29 09:14:17

标签: php algorithm

我目前正在尝试制作扑克算法,用2张牌创建所有可能的扑克组合。我知道有1,326种起手牌组合。 所以我创建了这样的起始套牌:

$startingDeck = array();
for($i=1; $i <= 13; $i++)
{
    for($x=0; $x <= 3; $x++)
    {
        array_push($startingDeck, array("Value" => $i ,"Color" => $x, "key"=> $i.$x));
    }
}

我现在想要遍历所有卡片并获得所有可能的组合,例如

: value 1 color 1 and value 1 color 2
: value 1 color 1 and value 1 color 3 
... etc
: value 2 color 0 and value 1 color 1
: value 2 color 0 and value 1 color 2
... etc

我想为所有可能的组合做这个,但是如何。

1 个答案:

答案 0 :(得分:1)

你已经有了起始牌组。我们的想法是生成所有排列:

E.g。

   CARD NUMBER
   1 2 3 4 5 6 7 8 9 10 11 12 13 ... 52
 1 o x x x x x x x x  x  x  x  x      x
 2 - o x x x x x x x  x  x  x  x      x
 3 - - o x x x x x x  x  x  x  x      x
 4 - - - o x x x x x  x  x  x  x      x
 5 - - - - o x x x x  x  x  x  x      x
 6 
 7 ......... and so on .........
 8
 9
10
11
12
13
...
52

我们在牌组中有52张牌(这是你在$startingDeck中生成的牌):

x表示我们想要生成的组合。请注意,我们不必生成矩阵的下半部分,因为在扑克中订单无关紧要,因为您同时收到两张卡片。我们也没有生成轴,因为您不能使用相同的卡两次(除非您作弊:)。

现在的想法是使用两个循环,但让第二个循环开始取决于第一个初始$j取决于$i。这样我们就不会产生例如我们已经2-1, 3-2, 3-1, ...生成了1-2, 1-3, 2-3, ...

让我们开始吧:

for ($i = 0; i < count($startingDeck); $i++) {
    // Ignore e.g. 2-1, 3-2, as we already generated 1-2, 2-3, and so on...
    for ($j = $i+1; $j < count($startingDeck); $j++) {
       $firstCard = $startingDeck[$i];
       $secondCard = $startingDeck[$j];
       // print my stuff
    }
}

这会生成顶部矩阵。 $i+1确保我们不生成对角线。

我希望有所帮助。