函数来查找重复(2D)细胞在3D阵列

问题描述:

int duplicate (int cards[5][4][13])函数来查找重复(2D)细胞在3D阵列

我一直在试图开发一种功能(原型是上文),通过保持5张牌和数值的3D阵列循环索引到一个单元格,该单元格表示存在一张卡片的单元基于诉讼(4)和面部(13)。例如,如果在假设的手中,第一张卡片是七个俱乐部,它的索引将是:[1] [3] [7]其中1是卡片3 =俱乐部和7 =七人组。

我需要循环查看手中的所有五张牌并确定是否有任何两张相同的牌。

我无法弄清楚如何做到这一点,因为我可以比较第一张卡片的索引与其他四张卡片,但其余卡片不会相互比较。

该函数返回1,如果有重复,则返回1,否则返回0。

我很困惑。

谢谢!解决这个

一种方法是遍历每个可能,又算什么呢出现了多少次:

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; 

但是,您所选择的数据结构不是很高效。要了解卡N是什么,你需要通过所有的cards[N][0..3][0..12]搜索找到1.更好的方法是使用一个struct

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

struct card cards[5]; 

这将是一个更容易的工作。例如,要查找重复,你只需要检查是否有任何其他卡具有相同的ranksuit值:

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

下面是我的一个想法: card1:cards [1] [3] [7], card3:cards [3] [3] [7]。 他们是不同的卡,但他们是相同的。 – Jerry 2010-12-09 00:48:56

你似乎在描述一个手是5集(希望独特)卡。这意味着你需要5个对象。但cards[5][4][13]是260个对象。这将用于具有5个插槽的结构,并且每个插槽可以包含任何数量的任何类型的卡。

由于我怀疑这就是你真正想要的,所以我建议你将你的手表改为int cards[5]。在cards的每个位置上,您将为每个卡片中的每个卡片放置一个整数0-12,黑色套装中的每张卡片放置13-25个等等,用于球杆和钻石。如果您还需要一种方法来表示该插槽中没有卡,则可以使用-1。

重复检查很容易,只需比较手中的每个整数值即可。