gpt4 book ai didi

java - 枚举每五张牌的组合

转载 作者:行者123 更新时间:2023-11-30 06:38:19 24 4
gpt4 key购买 nike

我刚遇到一个脑洞,我有一个 Deck 对象,想以迭代的方式从中获取每 5 张牌的组合。有人可以告诉我如何做到这一点,我想它会是:

for(int i =0; i <52; i++){
for(int j = i + 1 ; j < 52; j++){
for(int k = j + 1; k < 52; k++{
for(int l = k + 1; l < 52; l++){
for(int m = l + 1; m < 52; m++){
}
}
}
}
}

这是正确的吗?

谢谢

最佳答案

是的,这很好用。如果你想枚举所有的 n 卡组合,这是行不通的。

为此,您需要递归。将 0 号牌放入 0 号槽。递归枚举剩余 n-1 个槽中的所有 n-1 手牌(不包括 0)。重复,将卡 1 放入插槽 0。非常简单。

编辑:一些代码:

private static final int NUM_CARDS = 52;

public static void main(String[] args) {
enumerateAllHands(Integer.parseInt(args[0]));
}

private static void enumerateAllHands(int n) {
if (n > NUM_CARDS) {
throw new IllegalArgumentException();
}
int[] cards = new int[n];
BitSet cardsUsed = new BitSet();
enumerate(cards, 0, cardsUsed);
}

private static void enumerate(int[] cards, int from, BitSet cardsUsed) {
if (from == cards.length) {
emit(cards);
} else {
for (int i = 0; i < NUM_CARDS; i++) {
if (!cardsUsed.get(i)) {
cards[from] = i;
cardsUsed.set(i);
enumerate(cards, from + 1, cardsUsed);
cardsUsed.clear(i);
}
}
}
}

private static void emit(int[] cards) {
System.out.println(Arrays.toString(cards));
}

关于java - 枚举每五张牌的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com