作业帮 > 综合 > 作业

求一个纸牌游戏中的概率问题,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/06 10:02:17
求一个纸牌游戏中的概率问题,
这是我们这儿玩的保皇游戏中遇到的一个问题,5个人玩的,规则是用4副牌,去掉11张3,然后洗牌后轮流抹牌,一个人是41张(54*4-11=205张,205/5=41张),还有一个规定,是如果抹到4到2中的一色的4张牌的话那是最大的了,叫扛子(如4个红心7、4个黑桃5等等),能压任何牌(因为是玩最后出3的,所以有了可以最后清3啊,^-^.).扛子可是不好抹到,有时好几把都没有,有时连着三把都抹到.于是我们就想算算,就这种抹牌法,打多少把能抹到一把有扛子的牌?一把牌一个扛子两个扛子都算!
我也觉得好复杂,明天来用程序搞定. 一种可靠性算法,大概思路如图我用概率的观点写了程序.得到num=10时,p=0.4num=100时,p=0.33num=1000时,p=0.313num=10000时,p=0.2933num=100000时,p=0.2968打了num盘,五个人中至少有一个人拿到扛子概率为p所以你打二盘,一把都没扛子的概率是0.4945    你打七盘,一把都没扛子的概率是0.0851    可以很有把握地说打七盘必要一盘有扛子.程序如下:A=(1:13)';B=[A A A A];C=[10*B+1 10*B+2 10*B+3 10*B+4];D=reshape(C',1,208);D([206:end])=[] ;       %D中元素除十的商表示点数,1:13分别表示12345678910JQK                        %除十的余数表示花色,1234分别表示桃心梅方                        %然后呢我修正一下,去掉11个K.大鬼用131表示,小鬼用132表示                        %那个D的值就可以表示一种牌了,比如说红桃六D1=D;num=100000;NUM=num;myoccur=0;while(NUM>0)        D=D1;    NUM=NUM-1;    %现在发牌    N=205;flag=0;    while(N>0&&0==flag)        bondfat=Card(N);        %在1:N里随机41个数,即随机挑41张牌        N=N-41;        fat=D(bondfat);         %将这41张牌发给fat        D(bondfat)=[];          %减去这41张牌        for i=1:(41-4)          %判断是否有扛子,有则flag=1,否则flag=0            if fat(i)==fat(i+3)                flag=1;                break;            end        end    end    myoccur=myoccur+flag;       clear N bondfat fatendp=myoccur/num % % % % % % % % % % % % % % % % % % % % % % %function bond=Card(N) %在1:N里随机41个数M=41;bond1=1:N;bond=zeros(1,M);i=1;while(i~=M+1)    temp=bond1(unidrnd(N,1));    if temp~=0        bond(i)=temp;        bond1(temp)=0;        i=i+1;    endendbond=sort(bond);