C++洗牌算法 随机洗牌算法
在网上找了半天大体有两种做法
1、
思路:将54个数依次放到随机的位置。关键是每次找一个随机的位置。
下面是找这个随机位置的算法:
1、用一个Bool型数组记录各个位置是否已经放置了数,如果放置则置true,没有则为false。在算法开始时数组初始化为false。
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;
}
}
更多阅读
扑克牌洗牌的攻略 普通扑克牌怎么认牌
扑克牌洗牌的攻略——简介扑克牌洗牌技术是一种最基本的扑克牌技巧方法,很多的牌技都是通过洗牌来实现的。那么扑克牌洗牌基本手法有哪些?在此,我将为您一一介绍。扑克牌洗牌的攻略——工具/原料扑克牌
转载 C语言贪心算法 c语言贪心算法
你真牛原文地址:C语言贪心算法作者:人鱼的泪贪心算法开放分类:算法、信息学贪心算法所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最
C++洗牌算法 随机洗牌算法
洗牌即产生指定数据的随机序列。 在网上找了半天大体有两种做法 1、 思路:将54个数依次放到随机的位置。关键是每次找一个随机的位置。 下面是找这个随机位置的算法: 1、用一个Bool型数组记录各个位置是否已经放置了数
金鸿评论:大洗牌时代之一
大洗牌时代(之一)不能不承认,国家与国家的实力是有差距的。过去的半年里,美国轻轻松松就把日本、欧盟和俄罗斯打倒在地,日元暴贬,欧元暴跌,卢布危机,不过,大家几乎没看到美国是怎么出手的,美国就成功了。
中国将面临着大洗牌,你准备好了吗! 晴天 2013年 6月13日 金钱谷p2p面临大洗牌
中国将面临着大洗牌,你准备好了吗!晴天2013年6月13日,阿里巴巴支付宝正式推出“余额宝”,简直就是逆天的节奏!明摆着和银行抢生意啊。同样一万块钱,放银行里按活期利率算,一个月只有三十多块钱,而放在支付宝里转“余额宝”,一个月收益300-400