现在的位置: 首页 > 综合 > 正文

扑克牌去王随机洗均,4人拿,同色牌数量分布情况

2013年10月26日 ⁄ 综合 ⁄ 共 3003字 ⁄ 字号 评论关闭

打桥牌的时候会用到,同色牌一般出几手会出现“打绝一色”?

发牌拿到牌的情况,在洗牌时就注定了。如果是随机洗均的情况下是什么情况,可以用程序验证一下。

猜测一般是3、3、3、4这样拿一色牌的情况是最多的。可以打3手。

用perl程序验证一下。

  1. @card=(1..52); #52张牌
  2. %all_sanbu;    #统计表
  3. sub by_rand_sort
  4. {
  5.     #return rand(1) cmp rand(1); #
  6.     return rand(1) cmp 0.5;      #两种一样的结果 
  7. };
  8. sub randone
  9. {
  10.     my @mans=(0,0,0,0);       #一种花色
  11.     # my @mans2=(0,0,0,0);    #
  12.     # my @mans3=(0,0,0,0);    #
  13.     # my @mans4=(0,0,0,0);    #其余花色
  14.     my $id=0;
  15.     for my $one ( sort by_rand_sort @card )
  16.     {
  17.         if($one<=13 and $one>=1)
  18.         {
  19.             $mans[$id]++;
  20.         }
  21.         # if($one>=14 and $one <=26 )
  22.         # {
  23.             # $mans2[$id]++;
  24.         # }
  25.         # if($one >= 27 and $one <= 39 )
  26.         # {
  27.             # $mans3[$id]++;
  28.         # }
  29.         # if($one >=40 and $one <=52 )
  30.         # {
  31.             # $mans4[$id]++;
  32.         # }
  33.         $id++;
  34.         if($id>3){$id=0};
  35.     }
  36.     
  37.     my $ids="";
  38.     for my $i (sort @mans)
  39.     {
  40.         $ids=$ids.$i.",";
  41.     }
  42.     $all_sanbu{$ids}++;
  43.     
  44.     # $ids="";
  45.     # for my $i (sort @mans2)
  46.     # {
  47.         # $ids=$ids.$i.",";
  48.     # }
  49.     # $all_sanbu{$ids}++;
  50.     
  51.     # $ids="";
  52.     # for my $i (sort @mans3)
  53.     # {
  54.         # $ids=$ids.$i.",";
  55.     # }
  56.     # $all_sanbu{$ids}++;
  57.     
  58.     # $ids="";
  59.     # for my $i (sort @mans4)
  60.     # {
  61.         # $ids=$ids.$i.",";
  62.     # }
  63.     # $all_sanbu{$ids}++;
  64. };
  65. sub main
  66. {
  67.     while ( $time-- >0 )
  68.     {
  69.         randone();
  70.     };
  71. };
  72. $time=10000;
  73. print "开始".$time."次随机发牌/n";
  74. main();
  75. print "输出模拟结果/n";
  76. $xiaozu=0;
  77. while ( ($k,$v)=each( %all_sanbu) )
  78. {
  79.     print $v."次".$k."/n";
  80.     $xiaozu++;
  81. }
  82. print "一共".$xiaozu."组/n";
  83. system("pause");
  84.  

三次运算结果:

 

-----------------------------------------------------------------------------------------

开始10000次随机发牌
输出模拟结果
1301次3,3,3,4,
278次1,2,5,5,
958次2,2,4,5,
2468次2,3,4,4,
1233次1,3,4,5,
4次0,1,6,6,
8次0,2,3,8,
92次0,4,4,5,
15次0,3,3,7,
6次0,1,5,7,
34次2,2,2,7,
284次1,4,4,4,
289次1,3,3,6,
19次1,1,4,7,
43次0,2,5,6,
380次1,2,4,6,
3次1,1,3,8,
1次0,1,4,8,
156次1,2,3,7,
6次1,2,2,8,
48次1,1,5,6,
519次2,2,3,6,
84次0,3,4,6,
1679次2,3,3,5,
1次0,1,3,9,
71次0,3,5,5,
20次0,2,4,7,
一共27组

开始100000次随机发牌
输出模拟结果
2734次1,2,5,5,
55次0,1,6,6,
1011次0,4,4,5,
158次0,3,3,7,
435次2,2,2,7,
3009次1,3,3,6,
1次0,0,6,7,
3923次1,2,4,6,
22次0,1,4,8,
1386次1,2,3,7,
1次0,0,5,8,
5322次2,2,3,6,
1043次0,3,4,6,
227次0,2,4,7,
12244次3,3,3,4,
10629次2,2,4,5,
12340次1,3,4,5,
23841次2,3,4,4,
69次0,2,3,8,
2986次1,4,4,4,
55次0,1,5,7,
1次0,1,10,2,
456次0,2,5,6,
247次1,1,4,7,
1次0,0,4,9,
69次1,1,3,8,
138次1,2,2,8,
514次1,1,5,6,
16403次2,3,3,5,
4次0,2,2,9,
2次0,1,3,9,
664次0,3,5,5,
10次1,1,2,9,
一共33组

开始1000000次随机发牌
输出模拟结果
27339次1,2,5,5,
473次0,1,6,6,
9990次0,4,4,5,
1812次0,3,3,7,
4165次2,2,2,7,
30153次1,3,3,6,
36次0,0,6,7,
39556次1,2,4,6,
238次0,1,4,8,
14258次1,2,3,7,
10次0,0,5,8,
52260次2,2,3,6,
9746次0,3,4,6,
2329次0,2,4,7,
123778次3,3,3,4,
239029次2,3,4,4,
106354次2,2,4,5,
121949次1,3,4,5,
625次0,2,3,8,
29372次1,4,4,4,
672次0,1,5,7,
11次0,1,10,2,
4585次0,2,5,6,
2766次1,1,4,7,
4次0,0,4,9,
701次1,1,3,8,
1221次1,2,2,8,
5317次1,1,5,6,
1次1,1,1,10,
164242次2,3,3,5,
42次0,2,2,9,
45次0,1,3,9,
6816次0,3,5,5,
105次1,1,2,9,
一共34组

 

---------------------------------------------------------------------

 

可以看出,有正态分布的情况,向平均数量分布聚拢。不过很奇怪的是,最多出现的是2、3、4、4这种分配。

 

为什么不是3、3、3、4最多呢?随机数产生牌分布还不够随机的问题?

抱歉!评论已关闭.