程序设计 概率题

某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。
游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。
例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。
现在已知:双方开始时的体力值甲:1000,乙:2000。
假设战斗中,甲乙获胜的概率都是50%
求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。

分析:

4个回合,可以看成如下的组合,0表示甲战斗失败,1表示甲战斗胜利
甲乙胜利概率是1/2,所以每种01组合的概率相同

甲1回都没胜利,概率是1/2^4 = 1/16
0 0 0 0 >1000(双方体力值相差>1000)

甲胜利1回,概率是4*1/16=1/4
0 0 0 1 计算体力值差
0 0 1 0 
0 1 0 0 
1 0 0 0 

甲胜利2回
0 0 1 1 计算体力值差
0 1 0 1
0 1 1 0
1 0 0 1
1 0 1 0
1 1 0 0

甲胜利3回
0 1 1 1 计算体力值差
1 0 1 1
1 1 0 1
1 1 1 0

甲4回全胜
1 1 1 1 <1000

在这16种情况中,体力值差<1000的占的比例就是所求的概率

代码:

方法一:
#include <iostream>   
#include <cmath>   
using namespace std;  
  
int main(){  
    double count=0,f;  
    for (int i=0;i<16;++i){  
        double x=1000,y=2000;  
        for (int k=0;k<4;++k){  
            int t=i>>k&1;  
                if (t == 0){  
                    x-=x/4;  
                    y+=x/4;  
                    }  
                else{  
                    x+=y/4;  
                    y-=y/4;  
                    }  
            }  
        if (fabs(y-x)<1000)  
             ++count;  
        }  
    f=count/16;  
    cout<<f<<endl; while(1); 
    }  



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值