用c语言写一个洗牌发牌程序
时间: 2023-11-27 08:02:38 浏览: 85
本题需要用到随机数生成函数rand()和srand(),需要包含stdlib.h头文件。
洗牌程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CARD_NUM 54 // 牌的数量
int main() {
int cards[CARD_NUM]; // 存储牌的数组
int i, j, temp;
srand((unsigned int)time(NULL)); // 初始化随机数种子
// 初始化牌
for (i = 0; i < CARD_NUM; i++) {
cards[i] = i;
}
// 洗牌
for (i = CARD_NUM - 1; i > 0; i--) {
j = rand() % (i + 1); // 生成0到i之间的随机数
if (j != i) { // 交换位置
temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}
// 输出洗牌后的牌
for (i = 0; i < CARD_NUM; i++) {
printf("%d ", cards[i]);
}
return 0;
}
```
发牌程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define CARD_NUM 54 // 牌的数量
#define PLAYER_NUM 4 // 玩家数量
int main() {
int cards[CARD_NUM]; // 存储牌的数组
int players[PLAYER_NUM][CARD_NUM / PLAYER_NUM]; // 存储每个玩家的牌
int i, j, k;
srand((unsigned int)time(NULL)); // 初始化随机数种子
// 初始化牌
for (i = 0; i < CARD_NUM; i++) {
cards[i] = i;
}
// 洗牌
for (i = CARD_NUM - 1; i > 0; i--) {
j = rand() % (i + 1); // 生成0到i之间的随机数
if (j != i) { // 交换位置
int temp = cards[i];
cards[i] = cards[j];
cards[j] = temp;
}
}
// 发牌
k = 0;
for (i = 0; i < CARD_NUM / PLAYER_NUM; i++) {
for (j = 0; j < PLAYER_NUM; j++) {
players[j][i] = cards[k++];
}
}
// 输出每个玩家的牌
for (i = 0; i < PLAYER_NUM; i++) {
printf("Player %d: ", i+1);
for (j = 0; j < CARD_NUM / PLAYER_NUM; j++) {
printf("%d ", players[i][j]);
}
printf("\n");
}
return 0;
}
```
这里假设4个玩家,每个玩家发13张牌,剩余的2张不发给任何人。