先来看一个例子,即赌徒输光问题:
赌徒甲有资本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))); } } }