C语言程序设计第四版(何钦铭、颜晖)第十一章 指针进阶之随机发牌

【例11-6】随机发牌。一副纸牌有52张,4种花色,每种花色13张。用程序模拟随机发牌过程,将52张牌按轮转的方式发放给4人,并输出发牌结果。

复制代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
struct card{
	int suit;
	int face;
};
int deal(struct card *wdeck);
int main(){
	const char *suit[4]={"红心","方块","梅花","黑桃"};
	const char *face[13]={"A","K","Q","J","10","9","8","7","6","5","4","3","2"};
	struct card deck[52];
	int i; 
	deal(deck);
	for(i=0;i<52;i++){
		if(i%13==0){
			printf("\nplayer:%d\n",i/13+1);
		}
		printf("%s%s ",suit[deck[i].suit],face[deck[i].face]);
	}
	return 0;
} 
int deal(struct card *wdeck){	//用于生成打乱顺序的牌 ,相当于创建完整牌组+洗牌 
	static int temp[52]={0};	//规定:0代表未被发出,1代表已发出;意味着使生成的随机数不重复 
	srand(time(NULL));
	int i,t,m;
	for(i=0;i<52;i++){
		while(1){
			m=rand()%52;		//随机发出的牌号
			if(temp[m]==0)break;//如果之前没发过这张牌号,则跳出循环确定该号牌的花色和点数;否则重新生成牌号 
		}
		temp[m]=1;
		t=(i%4)*13+(i/4);		//轮流发牌,0~12为1号牌主,13~25为2号牌主,26~38为3号牌主,39~51为4号牌主 
		wdeck[t].suit=m/13;	    //借助牌号确定花色和点数 
		wdeck[t].face=m%13; 
	}
}

输出结果:

player:1

方块10 红心4 梅花2 黑桃J 梅花6 梅花7 红心J 方块7 黑桃8 黑桃9 黑桃10 方块Q 黑桃4

player:2

红心7 梅花5 黑桃6 黑桃Q 红心6 黑桃3 方块8 红心10 梅花Q 红心3 梅花10 红心2 方块2

player:3

黑桃K 梅花K 梅花9 黑桃5 红心8 梅花3 方块4 方块9 梅花J 梅花8 方块A 红心5 红心K

player:4

梅花A 方块5 方块6 红心9 方块K 红心Q 黑桃2 方块3 梅花4 黑桃7 红心A 方块J 黑桃A

相关推荐
傻啦嘿哟3 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670793 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
李少兄4 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei5 小时前
Java 写 Agent:模型只是组件
java·开发语言
小玮看世界5 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
繁星蓝雨6 小时前
C++的设计与演进大纲(如何从C语言一步步成长为C++)
c语言·开发语言·c++·c++历史·c++演进
Evand J6 小时前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
yutian06066 小时前
C: Unix UTC 时间戳转为 UTC+8 北京时间
c语言·unix
杜大哥7 小时前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python