抓牌抓到8个2的概率到底是多少

题主啊,我想看看你的代码,因为我自己的代码算出来,每1000000次试验中,有人\u0026gt;=7张2的次数在770~850之间浮动啊。注:下面的代码使用了C++11开始提供的random库,来保证真的是在指定范围内等概率随机的。注2:使用的洗牌方法,是如何测试洗牌程序 | | 酷 壳 - CoolShell 中提到的Fisher-Yates shuffle。注3:因为使用了C++11特性,所以,CFree不够看了,换Dev-C++,Orwell Dev-C++ 5.4.2以及以上的,自带MinGW的版本吧~可以选择C++11 编译了#include \u0026lt;stdio.h\u0026gt;#include \u0026lt;ctype.h\u0026gt;#include \u0026lt;string.h\u0026gt;#include \u0026lt;stdlib.h\u0026gt;#include \u0026lt;limits.h\u0026gt;#include \u0026lt;math.h\u0026gt;#include \u0026lt;algorithm\u0026gt;#include \u0026lt;random\u0026gt;#include \u0026lt;time.h\u0026gt;using namespace std;typedef long long ll;int arr;int cnt;int main(){ int times=1000000; int threshold=7; while(1){ int accept=0; std::default_random_engine generator(time(NULL)); for(int T=0;T\u0026lt;times;T++){ for(int i=0;i\u0026lt;104;i++)arr=i; fill(cnt,cnt+4,0); for(int i=0;i\u0026lt;104-1;i++){ std::uniform_int_distribution\u0026lt;int\u0026gt; dis(i,103); int item=dis(generator); swap(arr,arr); } //假设前8张牌(0~7)为我们关心的8张2,其他牌是什么这里不在意, //那我们要知道这8张牌的去向,或者说,在谁的手上。 //这里假设shuffle完以后0~25给A,26~51给B,依此类推。 for(int i=0;i\u0026lt;104;i++){ if(arr\u0026lt;8)cnt++; } for(int i=0;i\u0026lt;4;i++){ if(cnt\u0026gt;=threshold){ accept++; break; } } } printf("%d\",accept); } return 0;}=====================================================看到楼上的回答,终于觉得,Now we are talking了。现在仔细想想,觉得8张2比7张及更多的2容易一些。(7张以及更多,容易出现算少了/算多了的情况,8张没那么多事)。对8张,我的思路:和下面代码一样,0~7代表8张2,0~25号给A,26~51号给B,以此类推。那么,一个洗好的牌,给出去8张2在一个人手上,就意味着:这8张2在同一个人要发到的104/4=26张牌的位置中随便挑8个,自己内部还随便排,其他的牌也随便排。然后考虑到是4个人,一个人的概率直接*4写出来就是:抓牌抓到8个2的概率到底是多少
这和我现在让电脑模拟出来的,每10000000(1千万)次实验中有235~255次有人抓8张2,还是吻合的。然后是至少7张的情况。仿照8张的处理思路,在8张中选出7张,这7张给同一个人,剩下的其他牌……!!!不能随便的就处理了第8张2!!!抓牌抓到8个2的概率到底是多少


推荐阅读