设为首页 加入收藏

TOP

洗牌算法
2014-11-24 00:04:09 来源: 作者: 【 】 浏览:14
Tags:洗牌 算法

题:.给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。
分析:54张牌分别用0到53的数值表示并存储在一个整形数组里,数组下标(即初始数值)代表纸牌所在的位置,如boke[0]的值即为0。这样做便于知道最终元素换到了哪个位置,例如最终boke[3]的值为7,则知道是7号位的元素换位到3号位。接下来,遍历整个数组,在遍历过程中随机产生一个随机数,并以该随机数为下标的数组元素与当前遍历到的数组元素进行对换。
代码如下:

01 #include
02 #include
03 #include
04 using namespace std;
05
06 void shuffle(int boke[]) //洗牌
07 {
08 int i,r,t;
09 srand((unsigned)time(NULL));
10 //加上此句则每次所得到的随机数均不再相同,否则重新执行程序,所得随机数保持不变
11 for(i=1; i<54; i++)
12 {
13 r=rand()%(54-i)+i;
14 //第一次生成随机数范围为1至53,第二次为2至53,然后依次类推
15
16 //交换
17 t=boke[i-1];
18 boke[i-1]=boke[r];
19 boke[r]=t;
20 }
21 }
22
23
24 int main(){
25 int boke[54],i;
26 for(i=0;i<54;i++) //初始化纸牌
27 boke[i]=i;
28
29 cout<<"before shuffle:"< 30 for(i=0; i<54; i++) //打印
31 cout< 32 cout< 33
34 shuffle(boke); //洗牌
35
36
37 cout<<"after shuffle:"< 38 for(i=0; i<54; i++) //打印
39 cout< 40 cout< 41 system("pause");
42 return 0;
43 }


作者:repaul
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在C语言中大概实现VC++中的LISTAR.. 下一篇词法解析程序

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: