C语言题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
时间: 2024-02-25 16:59:29 浏览: 151
以下是 C 语言的实现:
```c
#include<stdio.h>
int n;
int cnt[4][14];
int main() {
scanf("%d", &n);
int color, num;
for(int i = 0; i < n; i++) {
scanf("%d%d", &color, &num);
cnt[color - 1][num]++;
}
for(int i = 0; i < 4; i++) {
for(int j = 1; j <= 13; j++) {
if(cnt[i][j] == 0) {
printf("%d %d\n", i + 1, j);
}
}
}
return 0;
}
```
思路解析:
这道题可以使用一个二维数组 $cnt[i][j]$ 记录每个花色中每个数字出现的次数。然后遍历一遍整个数组,输出未出现的牌的信息即可。
相关问题
写一段c语言代码 打牌预处理 题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
以下是实现该功能的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
```
题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。 题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
以下是使用C语言实现的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
int cards[4][13] = {0}; // 初始化牌面状态
// 处理现有牌信息
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
char card_type[10];
int card_num;
scanf("%s %d", card_type, &card_num);
card_num--; // 将1~13转化为0~12
if (strcmp(card_type, "spade") == 0) {
cards[0][card_num] = 1;
} else if (strcmp(card_type, "heart") == 0) {
cards[1][card_num] = 1;
} else if (strcmp(card_type, "club") == 0) {
cards[2][card_num] = 1;
} else if (strcmp(card_type, "diamond") == 0) {
cards[3][card_num] = 1;
}
}
// 输出缺失的牌
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 13; j++) {
if (cards[i][j] == 0) {
if (i == 0) {
printf("spade %d\n", j + 1);
} else if (i == 1) {
printf("heart %d\n", j + 1);
} else if (i == 2) {
printf("club %d\n", j + 1);
} else {
printf("diamond %d\n", j + 1);
}
}
}
}
return 0;
}
```
代码思路:
1. 首先创建一个二维数组,用于记录每张牌的状态,初始化为0。
2. 处理输入的现有牌信息,根据牌的类型和数字,将相应位置的状态改为1。
3. 遍历二维数组,输出状态为0的牌,根据类型和数字输出。
阅读全文