蓝桥杯比武问题
某游戲規(guī)則中,甲乙雙方每個(gè)回合的戰(zhàn)斗總是有一方勝利,一方失敗。游戲規(guī)定:失敗的一方要把自己的體力值的1/4加給勝利的一方。
例如:如果雙方體力值當(dāng)前都是4,則經(jīng)過一輪戰(zhàn)斗后,雙方的體力值會(huì)變?yōu)?#xff1a;5:3。
現(xiàn)在已知:雙方開始時(shí)的體力值甲:1000,乙:2000。
假設(shè)戰(zhàn)斗中,甲乙獲勝的概率都是50%
求解:雙方經(jīng)過4個(gè)回合的戰(zhàn)斗,體力值之差小于1000的理論概率。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 using namespace std; 6 7 int main() 8 { 9 int i,j,k; 10 //二進(jìn)制枚舉,需要概率對(duì)半 11 double cnt = 0; 12 for(i=0; i<16; i++) 13 { 14 double a = 1000, b = 2000;//寫在for內(nèi), 15 for(j=0; j<4; j++)//從0開始 16 { 17 if((i>>j)&1) 18 { 19 a -= a/4; 20 b += a/4; 21 } 22 else 23 { 24 a += b/4; 25 b -= b/4; 26 } 27 } 28 if(fabs(a-b)<1000.0)//內(nèi)層for外 29 cnt++;//double 也可以自增 30 } 31 cout<<cnt/16.0<<endl; 32 system("pause"); 33 return 0; 34 } 1 #include<stdio.h> 2 #include<math.h> 3 #define N 4 4 double p=0.5;//p表示甲贏的概率是0.5 5 6 double fun(double x, double y, int cur, double k) { 7 double sum=0; 8 if(cur==N) { 9 if(fabs(x-y)<1000) 10 sum+=k; 11 return sum; 12 } 13 sum+=fun(x-x/4,y+x/4,cur+1,k*(1-p));//甲輸?shù)舯荣?/span> 14 sum+=fun(x+y/4,y-y/4,cur+1,k*p); 15 return sum;//這個(gè)必須有,因?yàn)楫?dāng)cur!=N時(shí)必須也要有返回 16 } 17 int main() { 18 printf("%lf\n",fun(1000,2000,0,1)); 19 return 0; 20 }?
轉(zhuǎn)載于:https://www.cnblogs.com/hxsyl/archive/2013/04/26/3045951.html
總結(jié)
- 上一篇: 北京地铁线路图纯算法附带求极权值(原创)
- 下一篇: 列字段通用excel导入修改版