Hold'em中有个可能的头对头匹配。假设每张卡都有一个阵列,我怎么能列举所有这些比赛?
例如,列举所有可能的起手牌是:
for (int a = 0; a < 51; ++a) {
for (int b = a + 1; b < 52; ++b) {
println(cards[a] + "," + cards[b]);
}
}
我的训练可以让所有的比赛增加两次(得到As,Ah vs Kc,Kd和Kc,Kd vs As,Ah):
long total = 0;
for (int a = 0; a < 51; ++a) {
for (int b = a + 1; b < 52; ++b) {
for (int c = 0; c < 51; ++c) {
for (int d = c + 1; d < 52; ++d) {
total++;
}
}
}
}
答案 0 :(得分:0)
您的代码打印出正确的结果,但不会正确迭代所有卡片。 a
和c
应该循环到52。需要使用if
语句删除额外的牌:
for (int a = 0; a < 52; ++a) {
for (int b = a + 1; b < 52; ++b) {
for (int c = 0; c < 52; ++c) {
for (int d = c + 1; d < 52; ++d) {
if (c != a && c != b && d != a && d != b) {
total++;
}
}
}
}
}
然后可以修改它以消除重复的手:
for (int a = 0; a < 52; ++a) {
for (int b = a + 1; b < 52; ++b) {
for (int c = a + 1; c < 52; ++c) {
for (int d = c + 1; d < 52; ++d) {
if (c != b && d != b) {
total++;
}
}
}
}
}