我真的不能想到一个好办法,字这个问题,也不是一个好标题,也许答案是如此可笑的简单,我很想念它。我工作的一个扑克AI,我想计算存在的双手它们比我更好的数量。我知道如何说,但我想不出在一组牌是最好的方式进行迭代。

所以,我在翻牌,我知道我的两个证,并有3张卡上的电路板。因此,有47张未知的卡,我想遍历的这47卡假设两个是晕倒了,所以你不能有相同的点数和花色的两张牌所有可能的组合,和你,如果你以前计算的设置你不想做一遍,因为我将是浪费时间,而且这将调用多次。如果你不明白要我问请告诉我,我会更清楚。所以,我可以设置一些像这样,如果该元素等于1,这意味着它是不是在我的手中,而不是在董事会,4每种花色和13对每个秩。 。 setOfCards[4][13]

如果我做一个简单的指令集,用于这样的循环:(伪码)

//remove cards I know are in play from setOfCards by setting values to zero
for(int i = 0; i < 4; i++)
    for(int j = 0; j < 13; j++)
        for(int k = 0; k < 4; k++)
            for(int l = 0; l < 4; l++)
                //skip if values equal zero
                card1 = setOfCards[i][j]
                card2 = setOfCards[k][l]
                //now compare card1, card2 and set of board cards

所以,这实际上是要重复许多值,例如:卡1 = AceOfHearts,卡2 = KingOfHearts相同卡1 = KingOfHearts,卡2 = AceOfHearts。它也将改变我的计算。我应该如何去避免呢?此外,有没有这种技术的名称?谢谢你。

有帮助吗?

解决方案

这将会是更容易只是有一个的的52张牌阵,那么你可以说

for (int i=0; i<52; i++)
    for (int j=i+1; j<52; j++)

现在j总是比i高,所以你没有重复。你可以做的2-d阵列类似的事情,但它是一个有点棘手:

for (int k=i; ...) 
    for (int l=j+1; ...)

在内侧两个环路应该这样做。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top