定义52个数为({1,'a'},{1,'b'},{1,'c'},{1,d}......,{12,'d'})在数组pai a[52]={{1,'a'},{1,'b'}........} 中随意抽出20数,放在数组int b[20]={........}中,编一个函数程序来完成这项任务。
时间: 2023-12-13 22:02:44 浏览: 46
好的,请参考下面的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct {
int num;
char suit;
} Pai;
int main() {
Pai a[52];
int b[20];
int i, j, k;
// 初始化牌组
k = 0;
for (i = 0; i < 4; i++) {
for (j = 1; j <= 13; j++) {
a[k].num = j;
if (i == 0) {
a[k].suit = 'a';
} else if (i == 1) {
a[k].suit = 'b';
} else if (i == 2) {
a[k].suit = 'c';
} else {
a[k].suit = 'd';
}
k++;
}
}
srand((unsigned)time(NULL)); // 初始化随机数种子
// 从牌组中随机抽取20张牌
for (i = 0; i < 20; i++) {
j = rand() % (52 - i) + i; // 生成随机数
b[i] = a[j].num; // 将点数存入b数组
a[j].num = a[i].num; // 交换a[j]和a[i],保证不会重复取牌
a[i].num = b[i];
}
// 输出结果
printf("20 cards: ");
for (i = 0; i < 20; i++) {
printf("%d ", b[i]);
}
printf("\n");
return 0;
}
```
这个程序使用了一个结构体Pai来表示牌,其中num表示点数,suit表示花色。程序首先初始化了一副牌,并且使用随机数生成20个不同的下标,然后将对应的点数存入b数组中。程序最后输出了b数组中的20张牌。