先来看一个例子,即赌徒输光问题:
赌徒甲有资本a元,赌徒乙有资本b元,两人进行赌博,每赌一局输者给赢者1元,没有和局,直赌至两人中有一人输光为止。设在每一局中,甲获胜的概率为p,乙获胜的概率为q=1-p,求甲先输光的概率。
解:先设c=a+b; r=q/p;
这个实际上是
Markov过程(马尔科夫过程),具体细节不说了,结果就是:
我的代码如下:
#include<iostream>
#include<cmath>
using namespace std;
#define pre 1e-3
int main()
{
int a,b,c;
double p,q,r;
while(cin>>a>>b>>p>>q)
{
if(a==0)
cout<<"0.00"<<endl;
else if(b==0)
cout<<"1.00"<<endl;
else if(fabs(p-1)<pre||fabs(q-0)<pre)
cout<<"1.00"<<endl;
else
{
c=a+b;
r=q*(1-p)/(p*(1-q));
if(fabs(r-1)<pre)
printf("%.2lf\n",(double)a/c);
else
printf("%.2lf\n",(1-pow(r,(double)a))/(1-pow(r,(double)c)));
}
}
}