2010-12-09 5 views
0

int duplicate (int cards[5][4][13])Fonction pour trouver des doublons de cellules (2d) dans un tableau 3d

Je suis en train de développer une fonction (le prototype est au-dessus) qui boucle à travers un tableau 3D qui détient 5 cartes d'une main et le numérique l'indice d'une cellule qui contient un 1 indiquant qu'une carte existe est basé sur la combinaison (4) et la face (13). Par exemple, si dans une main hypothétique la première carte était un sept des clubs, son index serait: [1] [3] [7] où 1 est la carte 3 = clubs et 7 = 7.

J'ai besoin de faire défiler les cinq cartes de la main pour savoir s'il y a deux cartes identiques.

Je n'arrive pas à comprendre comment faire cela parce que je pourrais comparer l'index de la première carte à l'autre quatre, mais les cartes restantes ne seraient pas comparées les unes aux autres.

La fonction renvoie 1 s'il existe un doublon ou 0 si ce n'est pas le cas.

Je suis très confus.

Merci!

Répondre

1

Une façon de procéder est de boucle sur toutes les cartes possible, et comptez combien de fois il apparaît:

int suit; 

for (suit = 0; suit < 4; suit++) { 
    int rank; 

    for (rank = 0; rank < 13; rank++) { 
     int count = 0; 
     int card; 

     for (card = 0; card < 5; card++) { 
      count += cards[card][suit][rank]; 
     } 

     if (count > 1) 
      return 1; 
    } 
} 

return 0; 

Cependant, la structure de données que vous avez choisi est pas très efficace. Pour en savoir quelle carte N est, vous devez rechercher à travers tous cards[N][0..3][0..12] pour trouver le 1. Une meilleure approche serait d'utiliser un struct:

struct card { 
    int suit; /* 0..3 */ 
    int rank; /* 0..12 */ 
}; 

struct card cards[5]; 

Ce sera beaucoup plus facile de travailler avec. Par exemple, pour trouver des doublons, vous auriez juste besoin de vérifier si l'une des autres cartes avaient les mêmes rank et suit valeurs:

int card1, card2; 

for (card1 = 0; card1 < 5; card1++) 
    for (card2 = card1 + 1, card2 < 5; card2++) 
     if (cards[card1].suit == cards[card2].suit && cards[card1].rank == cards[card2].rank) 
      return 1; 
return 0; 
+0

Voici un exemple de ma réflexion: carte1: cartes [1] [3] [7], carte3: cartes [3] [3] [7]. Ce sont des cartes différentes mais identiques. – Jerry

+0

Vous souhaitez donc savoir s'il existe une carte identique dans une main * différente *? – caf

+0

Dans la main. les cartes pourraient être plus convenablement nommées mains dans ce cas. de la carte 5 dans cette main je cherche deux qui sont idenctical. – Jerry

1

Vous semblez être décrire une main qui est une collection de 5 (espérons- uniques). Cela signifie que vous voulez 5 objets. Mais cards[5][4][13] est de 260 objets. Ce serait pour une structure avec 5 slots, et chaque slot peut contenir n'importe quelle quantité de n'importe quel type de carte.

Puisque je pense que c'est ce que vous voulez vraiment, je vous conseille de changer votre représentation d'une main en int cards[5]. Dans chaque position cards vous placerez un entier de 0 à 12 pour chaque carte dans le costume de cœur, de 13 à 25 pour chaque carte dans le costume de pique, et ainsi de suite pour les clubs et les diamants. Si vous avez également besoin d'un moyen de représenter aucune carte dans cet emplacement, vous pouvez utiliser -1.

La vérification des doublons est facile, il suffit de comparer chaque valeur entière de la main.

Questions connexes