函数来查找重复(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];
这将是一个更容易的工作。例如,要查找重复,你只需要检查是否有任何其他卡具有相同的rank
和suit
值:
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;
答
你似乎在描述一个手是5集(希望独特)卡。这意味着你需要5个对象。但cards[5][4][13]
是260个对象。这将用于具有5个插槽的结构,并且每个插槽可以包含任何数量的任何类型的卡。
由于我怀疑这就是你真正想要的,所以我建议你将你的手表改为int cards[5]
。在cards
的每个位置上,您将为每个卡片中的每个卡片放置一个整数0-12,黑色套装中的每张卡片放置13-25个等等,用于球杆和钻石。如果您还需要一种方法来表示该插槽中没有卡,则可以使用-1。
重复检查很容易,只需比较手中的每个整数值即可。
下面是我的一个想法: card1:cards [1] [3] [7], card3:cards [3] [3] [7]。 他们是不同的卡,但他们是相同的。 – Jerry 2010-12-09 00:48:56