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

												

c语言洗牌算法的更多相关文章

  1. 洗牌算法Fisher-Yates以及C语言随机数的产生

    前些天在蘑菇街的面试中碰到一道洗牌的算法题,拿出来和大家分享一下! 原题是:54张有序的牌,如何无序的发给3个人? 这个题是运用经典的洗牌算法完成.首先介绍一种经典的洗牌算法--Fisher-Yate ...

  2. knuth洗牌算法

    首先来思考一个问题: 设计一个公平的洗牌算法 1. 看问题,洗牌,显然是一个随机算法了.随机算法还不简单?随机呗.把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可. 如果你的答案是这样, ...

  3. 洗牌算法Fisher_Yates原理

    1.算法 http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle 简单的原理如下图所示: 2.原理 总结下,洗牌算法Fisher_Yates ...

  4. C# 洗牌算法

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   C#洗牌算法如下: class Program { ...

  5. js 随机数 洗牌算法

    function shuffle(arr){ var len = arr.length; for(var i = 0;i<len -1;i++) { var idx = Math.floor(M ...

  6. Fisher–Yates shuffle 洗牌算法(zz)

    1,缘起 最近工作上遇到一个问题,即将一组数据,比如[A,B,C,D,E]其中的两个B,E按随机排列,其他的仍在原来的位置: 原始数组:[A,B,C,D,E] 随机字母:[B,D] 可能结果:[A,B ...

  7. 519. Random Flip Matrix(Fisher-Yates洗牌算法)

    1. 问题 给定一个全零矩阵的行和列,实现flip函数随机把一个0变成1并返回索引,实现rest函数将所有数归零. 2. 思路 拒绝采样 (1)先计算矩阵的元素个数(行乘以列),记作n,那么[0, n ...

  8. 《Algorithms算法》笔记:元素排序(3)——洗牌算法

    <Algorithms算法>笔记:元素排序(3)——洗牌算法 Algorithms算法笔记元素排序3洗牌算法 洗牌算法 排序洗牌 Knuth洗牌 Knuth洗牌代码 洗牌算法 洗牌的思想很 ...

  9. 洗牌算法shuffle

    对这个问题的研究始于一次在群里看到朋友发的洗牌面试题.当时也不知道具体的解法如何,于是随口回了一句:每次从剩下的数字中随机一个.过后找相关资料了解了下,洗牌算法大致有3种,按发明时间先后顺序如下: 一 ...

随机推荐

  1. SQL truncate 、delete与drop区别[z]

    [z]https://www.cnblogs.com/8765h/archive/2011/11/25/2374167.html 相同点: 1.truncate和不带where子句的delete.以及 ...

  2. dangerouslySetInnerHTMl

    dangerouslySetInnerHTMl 是React标签的一个属性,类似于angular的ng-bind: 听说这个单词这么长,是故意的,应为有可能不合时宜的使用innerHTML会导致XSS ...

  3. andorid 多线程handler用法

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  4. 文档根元素 "mapper" 必须匹配 DOCTYPE 根 "configuration"

    该问题是因为xml的头部写错了,一个是configuration,一个是mapper,不能直接复制. 参考链接:http://blog.csdn.net/testcs_dn/article/detai ...

  5. djiango控制语句

    {# 从0开始的索引#} {% for foo in value %} {# 从0开始的索引#} <p>{{ forloop.counter0 }}: {{ foo }}</p> ...

  6. 解决maven update project 后项目jdk变成1.5的问题

    一.问题描述 在Eclipse中新建了一个Maven工程, 然后更改JDK版本为1.7, 结果每次使用Maven > Update project的时候JDK版本都恢复成1.5. 二.原因分析 ...

  7. iOS中四种实例变量的范围类型@private@protected@public@package

    文档上记录是这样的 The Scope of Instance Variables Toenforce the ability of an object to hide its data, the c ...

  8. mybatis学习 十二 多表查询

    Mybatis 实现多表查询方式: (1)业务装配.对两个表编写单表查询语句,在业务(Service)把查询的两个结果进行关联. (2)使用Auto Mapping特性,在实现两表联合查询时通过别名完 ...

  9. 20155312 2016-2017-2《Java程序设计》课程总结

    20155312 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:你期望的师生关系是什么? 预备作业2:做中学learning by doing个人感想 ...

  10. json(原生态)

    什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSO ...