C语言题目描述 一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌。 现在Josie想要和朋友一起玩牌,但手上的牌她不确定是否完整。请你编写程序,帮她计算一下缺少的牌有哪些。 输入 第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现。 输出 输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出。若两张牌类型一样,则按照数字大小依次输出。
时间: 2024-02-25 15:59:29 浏览: 158
以下是 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]$ 记录每个花色中每个数字出现的次数。然后遍历一遍整个数组,输出未出现的牌的信息即可。
相关问题
一副扑克牌除去大小王以外共有五十二张牌,包含黑桃(spade),红心(heart),梅花(club),方块(diamond)四种类型,每种类型有编号为1~13的十三张牌,请使用c语言输入第一行输入为现有牌数n,接下来的n行为现有卡牌的信息(包含卡牌类型,卡牌数字),可能有重复的牌出现,输出缺少的牌,按照spade, heart, club, diamond的顺序依次输出(若两张牌类型一样,则按照数字大小依次输出)。
以下是一个简单的 C 语言程序实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define CARD_NUM 13
#define CARD_TYPE 4
int main()
{
int n, i, j, card[CARD_TYPE][CARD_NUM] = {0};
char type;
int num;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf(" %c%d", &type, &num);
switch (type) {
case 's':
card[0][num-1] = 1;
break;
case 'h':
card[1][num-1] = 1;
break;
case 'c':
card[2][num-1] = 1;
break;
case 'd':
card[3][num-1] = 1;
break;
default:
break;
}
}
for (i = 0; i < CARD_TYPE; i++) {
switch (i) {
case 0:
printf("spade: ");
break;
case 1:
printf("heart: ");
break;
case 2:
printf("club: ");
break;
case 3:
printf("diamond: ");
break;
default:
break;
}
for (j = 0; j < CARD_NUM; j++) {
if (card[i][j] == 0) {
printf("%d ", j+1);
}
}
printf("\n");
}
return 0;
}
```
程序中使用了一个二维数组 `card` 来记录每张牌是否出现过。其中数组的第一维表示牌的类型,第二维表示牌的数字。当输入一张牌时,将对应位置置为1。
最后按照题目要求输出缺少的牌,注意在输出时要先输出牌的类型,再输出数字。
写一段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
```
阅读全文