用C实现:输入描述 空格分隔的牌的信息 每张牌用{花色,牌面}表示 花色有 MNOP 四种 牌面有:A 2 3 4 5 6 7 8 9 10 J Q K 不包括两张King 例如: MA M2 O9 O10 OK 输出描述 将牌均分为两部分,如果牌总数是奇数,那么多出的一张放在第一份内 交替从第一份、第二份取牌输出 例如,原来牌的顺序为 MA M2 M3 M8 M9,洗牌后为 MA M8 M2 M9 M3
时间: 2024-01-01 11:06:54 浏览: 60
好的,以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 100 // 最大牌数
typedef struct {
char suit; // 花色
char rank[3]; // 牌面
} Card;
int main() {
Card cards[MAX_N];
int n = 0; // 牌数
char input[6]; // 用于读入每张牌的字符串表示
while (scanf("%s", input) != EOF) {
cards[n].suit = input[0]; // 第一个字符是花色
memcpy(cards[n].rank, input + 1, 2); // 后两个字符是牌面
n++;
}
int mid = (n + 1) / 2; // 计算中间位置
for (int i = 0; i < mid; i++) { // 从第一份开始输出
printf("%c%s ", cards[i].suit, cards[i].rank);
if (i + mid < n) { // 判断是否越界
printf("%c%s ", cards[i + mid].suit, cards[i + mid].rank);
}
}
printf("\n");
return 0;
}
```
代码的逻辑比较简单,首先定义一个 Card 结构体表示每张牌,包含花色和牌面两个成员变量。然后使用一个循环读入每张牌,将它们存储在一个 Card 数组中。读入时,我们可以使用 scanf 函数读取字符串表示,然后解析出花色和牌面,存储到 Card 结构体中。接下来,我们计算中间位置 mid,将牌分为两部分,并从第一份开始交替输出。需要注意的是,如果牌总数是奇数,多出的一张牌应该放在第一份中。输出时,我们可以使用 printf 函数输出每张牌的花色和牌面,最后记得换行。
阅读全文