假设用0-53来表示54张扑克牌的编号,编程为用户随机产生13张牌,再随便输入某一张牌的编号,采用顺序查找法查找这张牌是否还在用户手中,如果在用户手中,则输出是第几张牌。

本文介绍了如何在C语言中使用rand()函数生成0-53范围内的随机数,并通过标志数组避免重复牌的产生。程序代码展示了如何生成13张不重复的扑克牌,并实现查找功能。
摘要由CSDN通过智能技术生成

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.运行结果

小伙伴们快去试一试吧

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值