Sign-up....

复杂洗牌算法

一副牌(n张),有没有针对它的复杂洗牌算法?如果请给出源代码,谢谢了

[36 byte] By [msdn] at [2007-8-15 8:45:10]
# 1 Re: 复杂洗牌算法

Hash

antter at 2005-7-20 20:34:57 >
# 2 Re: 复杂洗牌算法

已知 N 张牌,放置于数组 A[N] ,对于任意一种牌序:

1。初始化随机数发生器,令 idx = N - 1 ;

2。从 idx 前面的 idx 张牌(0 ~ idx - 1)中,随机选一张,与 A[idx] 交换;

3。idx 减 1;

4。若 idx 大于 0(前面还有牌),跳到步骤2;

5。完成洗牌。

Leaveye at 2005-7-20 21:47:59 >
# 3 Re: 复杂洗牌算法

srand(time(0));

for(int i=52;i>0;--i)

{

int index=rand()%i;

a[i-1]^=a[index]^=a[i-1]^=a[index];

}

foochow at 2005-7-20 21:51:48 >
# 4 Re: 复杂洗牌算法

shuffle再shuffle,几遍之后很随机了。偷懒的话直接用stl提供的random_shuffle好了。

panda_lin at 2005-7-20 23:11:39 >
# 5 Re: 复杂洗牌算法

mark

w7x at 2005-7-21 8:42:12 >
# 6 Re: 复杂洗牌算法

直接用随机函数多随机几遍,就好了~~

guycs at 2005-7-21 9:22:56 >
# 7 Re: 复杂洗牌算法

原来还有些迷糊,看完大家的也就明白了,54个数,多随机几次就OK

caimps at 2005-7-23 11:03:01 >
# 8 Re: 复杂洗牌算法

一楼的是《c++大学教程》里的copy版

Leaveye说的是其优化算法

junnyfeng at 2005-7-23 19:52:08 >
# 9 Re: 复杂洗牌算法

菜鸟请问能不能再加个排序,就是对每个人的牌要按桥牌的规则输出。即一个人的牌要先按牌的花色(顺序为梅花、方块、红心和黑桃)进行分类,同一类的牌要再按A、K、Q、J、…、3、2牌的大小顺序排列。另发牌应按四个人的顺序依次分发。谢谢各位了。

hw20052768 at 2006-5-28 10:11:04 >
# 10 Re: 复杂洗牌算法
你们的方法我觉得不太好,为什么呢?所谓的洗牌就应该是这样的,本来是一副已经排好序的牌,现在呢,只需将他们的位置交换就可以拉!
anonymous at 2007-4-6 9:34:30 >
# 11 Re: 复杂洗牌算法
很简单的一个c程序,大家看看吧,请多指正!

include <stdio.h>

main()

{

int a[52];

int temp;

int i,j;

clrscr();

for (i=0;i<52;i++)

a[i]=i+1;

srand(time(NULL));

for (i=0;i<=9;i++)

{

j=rand()%10;

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

for (i=0;i<=9;i++)

printf("%d\n",a[i]);

}

anonymous at 2007-4-6 9:37:19 >
# 12 Re: 复杂洗牌算法
不好意思,数组的长度写错了,应该都是52的!
anonymous at 2007-4-6 9:38:46 >

C/C++

All Classified