Hai bisogno di aiuto l'iterazione su un array, recuperare due possibilità, senza ripetizioni, per Poker AI
Domanda
Non posso davvero pensare a un buon modo per parola questa domanda, né un titolo buono, e forse la risposta è così ridicolmente semplice che mi manca di esso. Sto lavorando su un poker AI, e voglio calcolare il numero di mani che esistono, che sono migliori delle mie. Ho capito come questo, ma quello che non riesco a capire è il modo migliore per iterare su un gruppo di carte.
Quindi sono al flop, so quali sono le mie due carte sono, e ci sono 3 carte sul tavolo. Quindi, ci sono 47 carte sconosciute e voglio iterare su tutte le possibili combinazioni di tali 47 carte partendo dal presupposto che due sono svenuto, quindi non è possibile avere due carte dello stesso valore e seme, e se si hanno già calcolato un set che si non si vuole farlo di nuovo, perché io di essere perdite di tempo, e questo sarà chiamato molte volte. Se non si capisce vogliono chiedo per favore mi dica e io chiarire di più. Quindi, posso impostare qualcosa di simile, se questo elemento è uguale a uno, significa che non è in mano e non sul bordo, 4 per ogni seme, e 13 per ogni grado. . 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
Quindi, questo è in realtà sta per ripetere molti valori, ad esempio: card1 = AceOfHearts, card2 = KingOfHearts è lo stesso di card1 = KingOfHearts, card2 = AceOfHearts. Sarà anche alterare i miei calcoli. Come devo fare per evitare questo? Inoltre, c'è un nome per questa tecnica? Grazie.
Soluzione
sarebbe più facile solo avere un solo array di 52 carte, allora si può dire
for (int i=0; i<52; i++)
for (int j=i+1; j<52; j++)
Ora j
sarà sempre maggiore di i
, in modo da ottenere senza ripetizioni. Si potrebbe fare una cosa simile per l'array 2-D, ma è un po 'più complicato:
for (int k=i; ...)
for (int l=j+1; ...)
nei due cicli interni dovrebbe farlo.