1.编程思路
(1)随机数的产生
C语言提供了产生随机数的库函数rand(),它可以返回一个0-32767之间的整数,这样可以用rand()%来产生一个0-m-1之间的随机数。
例如,可用rand()%33来产生一个0-32之间的随机数。如果要产生一个20-80之间的随机数,应该如何实现呢?可采用以下随机数生成方法:rand()%51+30。
注意:rand()函数需要添加头文件stdlib.h。
(2)重复数的处理
由于每张扑克牌都具有唯一性,所以,随机产生的13张牌不能一样。如何避免这个问题呢?
方法一:每产生一张扑克牌都检索一遍已有的牌,如果重复,测重新产生。
方法二:为每张牌设置一个标志,取值为0和1,0表示该牌没发过,1表示该牌已经发过。每产生一张牌,都检测其对应的标志,如果为0,则该牌有效,并将标志值改为1;如果为1,则该牌无效,需要重新产生一张牌。
比较这两种方法,方法一效率低下,所以,用方法二来实现,并且重新定义一个整型数组flag[54]来存储标志值。
2.程序代码
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 13
int main()
{
int card, i, cards[N], flag[54] = { 0 }, aim, pos = -1;
for (i = 0; i < N; i++)
{
card = rand() % 54;
while (flag[card] == 1)
card = rand() % 54;
flag[card] = 1;
cards[i] = card;
}
printf("用户手中的牌为:");
for (i = 0; i < N; i++)
printf("%d ", cards[i]);
printf("\n");
printf("请输入需要查找的车牌号:");
scanf("%d", &aim);
for(i = 0; i < N; i++)
if (cards[i] == aim)
{
pos = i;
break;
}
if (pos != -1)
printf("为第%d张牌\n", pos + 1);
else
printf("没找到\n");
return 0;
}
3.运行结果
小伙伴们快去试一试吧