【问题标题】:PHP - Poker algorithm that creates all possible poker combinationsPHP - 创建所有可能的扑克组合的扑克算法
【发布时间】:2016-09-29 09:14:16
【问题描述】:

我目前正在尝试制作一种扑克算法,可以用 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));
    }
}

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

: 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

我想对所有可能的组合执行此操作,但如何操作。

【问题讨论】:

    标签: php algorithm


    【解决方案1】:

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

    例如

       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 确保我们不会生成对角线。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多