博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言洗牌算法
阅读量:6431 次
发布时间:2019-06-23

本文共 1774 字,大约阅读时间需要 5 分钟。

#include<stdio.h>

#include<stdlib.h>
#include<time.h>
#include<string.h>
void shuffle(char poker[54][7])
{
char temp[6]="";
for (int i = 0; i < 54; i++)
{
int j = rand() % 54;
strcpy(temp, poker[i]);
strcpy(poker[i], poker[j]);
strcpy(poker[j], temp);
}
}
int main(void)
{
srand(time(NULL));
char poker[54][7];
/*初始化*/
for (int i = 0; i < 52; i++)
{
if((i+1)%4==0) strcpy(poker[i], "方");
else if ((i + 1) % 4 == 1)strcpy(poker[i], "草");
else if ((i + 1) % 4 == 2)strcpy(poker[i], "红");
else strcpy(poker[i], "黑");
}
for (int i = 0; i < 52; i++)
{
int j = (i + 1)/ 4;
switch (j)
{
case 0:strcat(poker[i], "A"); break;
case 10:strcat(poker[i], "J"); break;
case 11:strcat(poker[i], "Q"); break;
case 12:strcat(poker[i], "K"); break;
default:char temp[3]="";
_itoa(j+1,temp,10);
strcat(poker[i], temp); break;
}
}
strcpy(poker[52],"小王");
strcpy(poker[53], "大王");
shuffle(poker);
for (int i = 0; i < 54; i++)
{
printf("%s ", poker[i]);
/*方便显示*/
if ((i + 1) % 13 == 0)printf("\n");
}
return 0;
}

头文件:#include <time.h>

定义函数:time_t time(time_t *t);
函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t 指针所指的内存。
返回值:成功则返回秒数,失败则返回-1。

所以上程序中time(Null)起到产生一个永远不重复的数字的作用。

srand()和rand(),srand()就是给rand()提供种子,这两个函数在#include<stdlib.h>中

void srand(   unsigned int seed );
int rand( void );

其中seed的值不同rand()就会返回不同的随机数。

所以rand()作用就是每次都产生不同的随机数。另外一定要注意,每执行一次rand()函数,程序都会同时重新执行一次srand(seed),如果seed有变化,rand()就会生成

一个和上次执行不一样的随机数。因为上面程序定义了srand(time(NULL)),所以每次调用执行rand()都会产生一个新的随机数。

char *_itoa(   int value,   char *str,   int radix );           //value是要转化的int值,str是转化完要存放的位置的起始地址,radix表示转化时的进制如2,8,10,16等

程序思路:

用字符串数组表示54张牌,0-3元素为A,依次类推,52和53号元素表示大小王。洗牌的问题转化为将数组中每个元素都与另一个随机元素交换值的问题。继而转化为每次交换产生一个0~53的随即数字的问题。

 

转载于:https://www.cnblogs.com/ma77045728/p/6921216.html

你可能感兴趣的文章
LYNC2013部署系列PART3:前端部署
查看>>
Apache XML-RPC Client Classes
查看>>
shell if [ -f .... ]
查看>>
djagon实战form数据库等操作
查看>>
ISIS的高级属性
查看>>
How To系列(二):how to baidu dork
查看>>
Nginx %00空字节执行任意代码(php)漏洞
查看>>
WordPress主题目录结构说明
查看>>
(总结)Nginx使用的php-fpm的两种进程管理方式及优化
查看>>
启动APACHE出现“error while loading shared libraries: libiconv.so.2”
查看>>
MFS文件系统安装指南
查看>>
查询dsjob
查看>>
Oracle与SQL Server互连
查看>>
JavaScript颜色选择器插件
查看>>
区块链和电子商务 | 大规模电子购物
查看>>
深入理解Fsync
查看>>
c++构造函数详解
查看>>
定制 LAMP 网站服务平台
查看>>
shell中数字计算方法(bc/expr/$(())/let/awk)
查看>>
关于CDH6的一些介绍
查看>>