2010-12-09 38 views
0

int duplicate (int cards[5][4][13])函數來查找重複(2D)細胞在3D陣列

我一直在試圖開發一種功能(原型是上文),通過保持5張牌和數值的3D陣列循環索引到一個單元格,該單元格表示存在一張卡片的單元基於訴訟(4)和麪部(13)。例如,如果在假設的手中,第一張卡片是七個俱樂部,它的索引將是:[1] [3] [7]其中1是卡片3 =俱樂部和7 =七人組。

我需要循環查看手中的所有五張牌並確定是否有任何兩張相同的牌。

我無法弄清楚如何做到這一點,因爲我可以比較第一張卡片的索引與其他四張卡片,但其餘卡片不會相互比較。

該函數返回1,如果有重複,則返回1,否則返回0。

我很困惑。

謝謝!解決這個

回答

1

一種方法是遍歷每個可能,又算什麼呢出現了多少次:

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

1

你似乎在描述一個手是5集(希望獨特)卡。這意味着你需要5個對象。但cards[5][4][13]是260個對象。這將用於具有5個插槽的結構,並且每個插槽可以包含任何數量的任何類型的卡。

由於我懷疑這就是你真正想要的,所以我建議你將你的手錶改爲int cards[5]。在cards的每個位置上,您將爲每個卡片中的每個卡片放置一個整數0-12,黑色套裝中的每張卡片放置13-25個等等,用於球杆和鑽石。如果您還需要一種方法來表示該插槽中沒有卡,則可以使用-1。

重複檢查很容易,只需比較手中的每個整數值即可。