输入描述 空格分隔的牌的信息,每张牌用{花色,牌面}表示,花色有 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-04-16 13:29:25 浏览: 89
10-4磁场对载流导线的作用 (1).ppt
```c
#include <stdio.h>
#include <string.h>
void shuffleCards(char* cards, int length) {
int mid = length / 2;
char temp[3];
// 如果牌总数是奇数,多出的一张放在第一份内
if (length % 2 == 1) {
strncpy(temp, &cards[length * 3 - 3], 2);
for (int i = length * 3 - 1; i > 3; i--) {
cards[i] = cards[i - 3];
}
strncpy(&cards[2], temp, 2);
}
// 交替从第一份、第二份取牌输出
for (int i = 1; i < length; i += 2) {
strncpy(temp, &cards[i * 3], 2);
for (int j = i * 3; j > i * 3 - 3; j--) {
cards[j] = cards[j - 3];
}
strncpy(&cards[i * 3 - 2], temp, 2);
}
}
int main() {
char cards[200];
printf("请输入空格分隔的牌的信息:");
fgets(cards, sizeof(cards), stdin);
// 去除换行符
cards[strcspn(cards, "\n")] = '\0';
int length = strlen(cards) / 3; // 计算牌的数量
shuffleCards(cards, length);
printf("洗牌后的结果为:%s\n", cards);
return 0;
}
```
在主函数中,程序首先获取用户输入的空格分隔的牌的信息,存储在字符数组 `cards` 中。
然后,程序去除输入字符串的换行符。
接下来,程序计算牌的数量,即输入字符串的长度除以3。
然后,程序调用 `shuffleCards` 函数对牌进行洗牌操作。
在 `shuffleCards` 函数中,首先判断牌的总数是否为奇数,如果是奇数,则将多出的一张牌放在第一份内。然后,程序使用循环按照交替的方式从第一份和第二份取牌,并进行输出。
最后,程序打印洗牌后的结果。
请注意,为了适应输入的牌的信息,我们将字符数组 `cards` 的长度设置为200,并假设输入的牌的数量不会超过该长度。如果输入的牌的数量超过该限制,则可能导致数组越界。
阅读全文