游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。
游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。
现在已知:双方开始时的体力值甲:1000,乙:2000。
假设战斗中,甲乙获胜的概率都是50%
求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。
分析: 双方经过四个回合的战斗,则一共会出现的情况有十六种,因此解决这个问题只需枚举出这十六种情况,计算出甲乙各自的体力值,求出两者之差的绝对值。然后记录小于1000的情况,一次求出概率。
#include <iostream>
using namespace std;
int main()
{
int count=0;
double f;
for (int i=0; i<16; ++i)
{
int 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 (abs(y-x)<1000)
++count;
}
f=count/16.0;
cout<<f<<endl;
return 0;
}