帮我用C语言写一段代码实现 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
时间: 2023-11-22 07:54:31 浏览: 114
扑克牌3张两人比大小C语言代码.pdf
以下是一份可能的实现,仅供参考:
```c
#include <stdio.h>
// 牌的类型
enum Suit {
SPADE, HEART, CLUB, DIAMOND
};
// 牌的数字
enum Rank {
ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING
};
// 牌的结构体
struct Card {
enum Suit suit; // 花色
enum Rank rank; // 数字
};
// 判断两张牌是否相等
int are_cards_equal(struct Card c1, struct Card c2) {
return c1.suit == c2.suit && c1.rank == c2.rank;
}
int main() {
// 建立一副完整的牌
struct Card full_deck[52];
int count = 0;
for (int s = SPADE; s <= DIAMOND; s++) {
for (int r = ACE; r <= KING; r++) {
full_deck[count].suit = s;
full_deck[count].rank = r;
count++;
}
}
// 输入现有的牌
int n;
scanf("%d", &n);
struct Card present_cards[52];
for (int i = 0; i < n; i++) {
int s, r;
scanf("%d %d", &s, &r);
present_cards[i].suit = s;
present_cards[i].rank = r;
}
// 统计缺失的牌
int missing[52];
int missing_count = 0;
for (int i = 0; i < 52; i++) {
int found = 0;
for (int j = 0; j < n; j++) {
if (are_cards_equal(full_deck[i], present_cards[j])) {
found = 1;
break;
}
}
if (!found) {
missing[missing_count] = i;
missing_count++;
}
}
// 输出缺失的牌
for (int s = SPADE; s <= DIAMOND; s++) {
for (int r = ACE; r <= KING; r++) {
int found = 0;
for (int i = 0; i < missing_count; i++) {
if (full_deck[missing[i]].suit == s && full_deck[missing[i]].rank == r) {
found = 1;
break;
}
}
if (found) {
printf("%d %d\n", s, r);
}
}
}
return 0;
}
```
这份代码中,我们使用了枚举类型来表示牌的花色和数字。在主函数中,我们首先建立了一副完整的牌,然后输入现有的牌,统计缺失的牌,最后按照要求输出缺失的牌。
阅读全文