面試過程中有趣的概率問題(坐飛機、撲克牌)


撲克牌

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,這算是神奇的不等式吧

100人坐飛機,第一個乘客在座位中隨便選一個坐下,第100人正確坐到自己坐位的概率是?

他們分別拿到了從1號到100號的座位,這些乘客會按號碼順序登機並應當對號入座,如果他們發現對應號座位被別人坐了,就會在剩下空的座位隨便挑一個坐.現在假設1號乘客瘋了(其他人沒瘋),他會在100個座位中隨便選一個座位坐下,問:第100人正確坐到自己坐位的概率是多少?(也可推廣到n名乘客n個座位的情況)
 
其實是一個遞歸問題
1名乘客1個位置 100%
2名乘客2個位置 你的狀態和第一個人有關,50%
3名乘客3個位置 第一個坐對了,那就是回到了狀態2
         第一個人占到你的位置
         第一個人坐到另一個人的位置,還是狀態2  這個概率是多少呢,就是(1/6+1/6)*3,還是50%
4一直往復下去還是如此
看起來你只和第一個人有關,第一個人第 [公式] 個人登機時,他的座位被占的概率是 [公式] 
 
 
不均勻的硬幣怎么讓兩個人等概率呢,可以扔兩次,相同了就再來,先反或先正為勝利。能粘的話粘起來也是可以的
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM