如何解决给定一手 7 张牌,找出所有 5 张顺子 (C)
我对 C 编程还很陌生,所以如果我有点不知所措,请告诉我。
我正在尝试编写一个扑克牌评估器。我现在面临的主要挑战是在 7 张牌中找到所有可用的 5 张顺子。我需要所有这些,而不仅仅是最高的一个,是为了以后使用我找到的顺子来搜索它们的同花顺。
这是我到目前为止所得到的:
- 定义卡片的结构
typedef struct
{
short pips; // Could be 1-13
suit suit; // taken from above enum
} card;
- 定义西装的枚举
typedef enum { spades,hearts,clubs,diamonds} suit;
int is_straight(card hand[],card straights[][STRAIGHT]){
// Sort the hand in ascending order
qsort(hand,HAND_SIZE,sizeof(card),comp);
int i,j = 1,k = 0;
int count = 1,res = 0;
while(1){
for (i = HAND_SIZE - j; i >= 1; i--){
if ((hand[i].pips - hand[i - 1].pips) == 1){
count++;
if (count == STRAIGHT){
res = 1;
memcpy(straights[k++],&hand[i-1],STRAIGHT*sizeof(card));
j++;
count = 1;
break;
}
}
else
count = 1;
}
if(i < 1) break;
}
return res;
}
我遇到的问题是卡片的重复值。比如手上:[A - spades,2 - Spades,3 - Spades,4 - Spades,5 - Spades,6 - Spades,6 - Hearts]
我得到这个输出:
2 of Spades
3 of Spades
4 of Spades
5 of Spades
6 of Spades
2 of Spades
3 of Spades
4 of Spades
5 of Spades
6 of Spades
Ace of Spades
2 of Spades
3 of Spades
4 of Spades
5 of Spades
有没有人对如何解决这个问题有更好的想法?另外,如前所述,如果您认为这对初学者来说太多了,请告诉我。
干杯。
解决方法
我认为这是一个很好的项目,可以练习您的 C 编程技能,这是您熟悉的内容,您可以在其中快速检查输出,而且您似乎已经朝着正确的方向前进。你只需要照顾小事。
目前的问题是,当您找到顺子时,您手上连续memcpy
五张牌,这不是您想要的重复值。
我认为处理重复值是这个项目的主要问题。也许你可以尝试不同的方法来解决这个问题?首先检查重复值并为它们分别制作?使用更多代码而不是试图将它们全部放在一个循环中是可以的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。