写一个随机发牌的程序。用户指定发几张牌,程序打印手牌。程序的会话如下: 输入手牌数量: 5 你的牌数: 9c 7d 3c 5d kd。用C语言实现
时间: 2024-03-18 13:40:23 浏览: 83
C语言程序设计实现随机发牌
好的,下面是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const char* suits[] = {"c", "d", "h", "s"};
const char* ranks[] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
void shuffle(int* deck, int n) {
for(int i = 0; i < n; i++) {
int j = rand() % n;
int temp = deck[i];
deck[i] = deck[j];
deck[j] = temp;
}
}
int main() {
srand(time(NULL)); // 初始化随机数生成器
int num_cards;
printf("输入手牌数量:");
scanf("%d", &num_cards);
int deck_size = 52;
int* deck = (int*) malloc(sizeof(int) * deck_size);
for(int i = 0; i < deck_size; i++) {
deck[i] = i;
}
shuffle(deck, deck_size); // 洗牌
printf("你的牌数:");
for(int i = 0; i < num_cards; i++) {
int card = deck[i];
int suit = card / 13;
int rank = card % 13;
printf("%s%s ", ranks[rank], suits[suit]);
}
printf("\n");
free(deck);
return 0;
}
```
在这里,我们首先定义了 `suits` 和 `ranks` 数组,分别表示花色和点数。然后定义了 `shuffle()` 函数,用于洗牌。
在 `main()` 函数中,我们首先读取用户输入的手牌数量,然后创建一个大小为 52 的牌堆,用整数表示每张牌。然后调用 `shuffle()` 函数洗牌。最后,我们输出用户的手牌,即打印前 `num_cards` 张牌的花色和点数。
需要注意的是,上面的代码没有考虑到重复发牌的情况,因此可能会出现重复的手牌。如果需要避免重复发牌,可以使用更加复杂的算法,这里不再赘述。
阅读全文