#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的随即数字的问题。

												

最新文章

  1. Teleport Ultra/Teleport Pro的冗余代码批量清理方法
  2. sql 创建数据库
  3. [POJ 1385] Lifting the Stone (计算几何)
  4. .NET开源工作流RoadFlow-流程设计-流程步骤设置-按钮设置
  5. MySQL数据库最大连接数
  6. Oracle 存储过程的创建,及触发器调用存储过程
  7. task_struct
  8. vmware安装Linux时无法打开xpdf
  9. SVN如何commit(提交)项目代码
  10. Flink on yarn的配置及执行
  11. Promise实现ajax
  12. javascript之Map
  13. python numpy 三行代码打乱训练数据
  14. 记账本微信小程序开发三
  15. 你真的会使用Github吗?
  16. hdu 3360 最小点覆盖 **
  17. std::bind技术内幕
  18. Git初级使用教程
  19. require.js 学习基础
  20. VS2010与Qt5.1.0的集成

热门文章

  1. vi/vim 按键说明
  2. Linux驱动之建立一个hello模块
  3. 虚拟机vmware centos7 扩展磁盘空间
  4. Java VisualVM 插件地址
  5. POJ2349 Arctic Network
  6. 10. pt-fk-error-logger
  7. ES6 中 let and const
  8. 谁说delphi没有IOCP库,delphi新的IOCP类库,开源中
  9. UI设计教程:如何在设计中运用颜色
  10. openssl_error_string()