C语言编写程序:一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。 样例查看模式 正常显示 查看格式 输入样例1 <-复制 47 S 10 S 11 S 12 S 13 H 1 H 2 S 6 S 7 S 8 S 9 H 6 H 8 H 9 H 10 H 11 H 4 H 5 S 2 S 3 S 4 S 5 H 12 H 13 C 1 C 2 D 1 D 2 D 3 D 4 D 5 D 6 D 7 C 3 C 4 C 5 C 6 C 7 C 8 C 9 C 10 C 11 C 13 D 9 D 10 D 11 D 12 D 13 输出样例1 S 1 H 3 H 7 C 12 D 8
时间: 2023-12-31 22:05:21 浏览: 98
以下是这道题的C语言解法,请参考:
```c
#include <stdio.h>
#include <string.h>
int main()
{
int n, deck[4][13]; // deck表示牌组,初始值为0
memset(deck, 0, sizeof(deck)); // 初始化牌组
scanf("%d", &n);
while (n--) {
char type;
int num;
scanf(" %c %d", &type, &num);
deck[type=='S' ? 0 : type=='H' ? 1 : type=='C' ? 2 : 3][num-1] = 1; // 标记有现有的牌
}
for (int i = 0; i < 4; i++) { // 遍历四种花色
for (int j = 0; j < 13; j++) { // 遍历十三张牌
if (!deck[i][j]) { // 如果牌组中对应的牌未标记
printf("%c %d\n", i==0 ? 'S' : i==1 ? 'H' : i==2 ? 'C' : 'D', j+1); // 输出缺失的牌
}
}
}
return 0;
}
```
解析如下:
1. 首先定义一个数组`deck`表示一副牌,数组元素初始值为0,表示这张牌未出现过。
2. 读入现有的牌,将对应的牌在`deck`中标记为1,表示这张牌已经出现过。
3. 遍历四种花色和十三张牌,如果对应的牌没有被标记,说明这张牌缺失,输出缺失的牌。
阅读全文