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