写一段c语言代码 打牌预处理 题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
时间: 2023-12-10 07:37:40 浏览: 132
以下是实现该功能的C语言代码:
```c
#include <stdio.h>
int main() {
int n;
int cards[4][13] = {0}; // 二维数组存储卡牌数量,初始值为0
scanf("%d", &n);
for (int i = 0; i < n; i++) {
char type;
int num;
scanf(" %c %d", &type, &num); // 注意输入时要加空格来消除回车符
switch (type) { // 根据卡牌类型将其放到对应的行中
case 's':
cards[0][num - 1]++;
break;
case 'h':
cards[1][num - 1]++;
break;
case 'c':
cards[2][num - 1]++;
break;
case 'd':
cards[3][num - 1]++;
break;
default:
break;
}
}
// 输出缺少的卡牌
for (int i = 0; i < 4; i++) { // 遍历每一行
for (int j = 0; j < 13; j++) { // 遍历每一列
if (cards[i][j] == 0) { // 如果数量为0,则输出缺少的卡牌
switch (i) { // 输出卡牌类型
case 0:
printf("s ");
break;
case 1:
printf("h ");
break;
case 2:
printf("c ");
break;
case 3:
printf("d ");
break;
default:
break;
}
printf("%d\n", j + 1); // 输出卡牌数字
}
}
}
return 0;
}
```
使用示例:
输入:
```
15
s 1
c 1
h 2
d 3
h 5
h 6
s 7
d 8
h 9
c 10
d 10
h 11
c 11
d 12
h 13
```
输出:
```
c 2
c 3
c 4
c 5
c 6
c 7
c 8
c 9
c 11
c 13
d 1
d 2
d 4
d 5
d 6
d 7
d 9
d 11
h 1
h 3
h 4
h 7
h 8
h 10
s 2
s 3
s 4
s 5
s 6
s 8
s 9
s 10
s 11
s 12
s 13
```
阅读全文