C++洗牌算法 随机洗牌算法

洗牌即产生指定数据的随机序列。
  在网上找了半天大体有两种做法
  1、
  思路:将54个数依次放到随机的位置。关键是每次找一个随机的位置。
  下面是找这个随机位置的算法:
  1、用一个Bool型数组记录各个位置是否已经放置了数,如果放置则置true,没有则为false。在算法开始时数组初始化为false。
C++洗牌算法 随机洗牌算法
  2、每次产生一个0~53的随机数,看这个位置是否已经放置了数,如果已经放置了,则继续用同样的方法找一个随机位置判断;如果这个位置还未放置,则设置此位置,并标记其已经放置。
  3、反复执行(2)直到所有的位置都放置了数为止。(只要设置成功54次数就说明所有位置已经设置了数)
  例程:
  void shuffle(int dest[],int n) //洗牌算法
  {
  int pos,card;
  memset(dest,0,sizeof(int)*n);
  for(card=1;card<=n;card++)
  {
  do
  {
  pos=rand()%(n+1);
  }while(dest[pos]!=0);
  dest[pos]=card;
  }
  }
  上面方法的问题:随着未设置的数渐渐变少,寻找未设置的位置会越来越难。如果牌数很多则更是不可思议。
  2、下面的思路是先对数组进行初始化然后随机交换两个位置,共交换n次,其中n越大,则随机越接近随机
  void shuffle ( int a[], int n )//洗牌算法
  {
  int tmp = 0,
  p1,p2;
  int cnt = rand() % 1023;
  while (cnt--)//随机交换两个位置的数,共交换cnt次
  {
  p1 = rand() % n;
  p2 = rand() % n;
  tmp = a[p1];
  a[p1] = a[p2];
  a[p2] = tmp;
  }
  }

  

爱华网本文地址 » http://www.413yy.cn/a/25101010/39107.html

更多阅读

扑克牌洗牌的攻略 普通扑克牌怎么认牌

扑克牌洗牌的攻略——简介扑克牌洗牌技术是一种最基本的扑克牌技巧方法,很多的牌技都是通过洗牌来实现的。那么扑克牌洗牌基本手法有哪些?在此,我将为您一一介绍。扑克牌洗牌的攻略——工具/原料扑克牌

转载 C语言贪心算法 c语言贪心算法

你真牛原文地址:C语言贪心算法作者:人鱼的泪贪心算法开放分类:算法、信息学贪心算法所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最

C++洗牌算法 随机洗牌算法

洗牌即产生指定数据的随机序列。  在网上找了半天大体有两种做法  1、  思路:将54个数依次放到随机的位置。关键是每次找一个随机的位置。  下面是找这个随机位置的算法:  1、用一个Bool型数组记录各个位置是否已经放置了数

金鸿评论:大洗牌时代之一

大洗牌时代(之一)不能不承认,国家与国家的实力是有差距的。过去的半年里,美国轻轻松松就把日本、欧盟和俄罗斯打倒在地,日元暴贬,欧元暴跌,卢布危机,不过,大家几乎没看到美国是怎么出手的,美国就成功了。

声明:《C++洗牌算法 随机洗牌算法》为网友不变的唯十二分享!如侵犯到您的合法权益请联系我们删除