撲克牌
54張撲克,平均分給三人,大小王在一個人手里的概率
這個可以直接組合數計算,我們把這兩張牌拿出來,就是16,18,18
16的那個人就相當於去52張牌里拿十二張,因為兩個人都是18,所以要去重
可以求得分子為C(52,16)*C(36,18)*C(18,18)*3
同理求的分母為C(54,18)*C(36,18)*C(18,18)
然后根據組合數公式,也就是18*17*3/(54*53)=17/53

#include<bits/stdc++.h> using namespace std; const int MD=1e9+7,N=2e6+5; int f[N],v[N]; void Init() { v[0]=v[1]=f[0]=f[1]=1; for(int i=2; i<N; i++) f[i]=1LL*f[i-1]*i%MD,v[i]=1LL*v[MD%i]*(MD-MD/i)%MD; for(int i=2; i<N; i++) v[i]=1LL*v[i-1]*v[i]%MD; } int C(int n,int m) { if(m<0||m>n) return 0; return 1LL*f[n]*v[m]%MD*v[n-m]%MD; } int main() { Init(); int n,m; while (cin>>n>>m)cout<<C(n,m)<<"\n"; return 0; }
當然有些人就不想那樣寫組合數,分子寫成C(52,18)*C(34,18)*C(16,16)*3也是可以的,只是通分沒那么好看,數值都是一樣的
還是以某人抽到大王為基准,而且還得抽到小王。大王可以出現在3×18的任意位置,小王也必須出現在相同的人手中,但不能出現在大王出現的那一輪(共17輪)。
即3×18×17
總共有3×18×53種情況,即小王不與大王相同位置。這是兔小弟的做法,我覺得也很巧妙哦
擴展問題變成了,一個人拿20張,另兩個人拿17張。hhhh斗地主的真實情況
地主當然概率要高些,但是具體是多少呢,我們可以看一下
分母比較簡單,先寫出分母C(54,20)*C(34,17)*C(17,17)*3
這三個人可能的牌是18 17 17和20 17 15
寫出分子就是C(52,18)*C(34,17)*C(17,17)*3+C(52,20)*(32,15)*C(17,17)*6
約分可以算出來是0.434661,上面那個值是0.320755
第一個有同學覺得一眼看過去就是1/3,但是實際上去錯誤的
比如兩副牌,有些人就覺得是1/2,其實是一個比1/2略小的數,16/53。
為什么會有這種情況呢,因為進行了占位,你這張牌有了就占去了那個位置,就不能直接乘上概率了
我們可以考慮6張牌分給兩個人,這樣算出來是2/5,其實公式就是(n/m-1)/(n-1)(n代表牌數,m代表分的堆數)
四個人,除去兩張大小王剩下52張撲克牌。問紅桃A和黑桃A同時被一個人拿到的概率,這個你很快算出來12/51了,隔壁還在自閉呢
但是你只要不平分或者不能平分就會出現煩人的約分問題,平分之前這個數肯定小於1/m,不平分之后肯定大於1/m,這算是神奇的不等式吧