題目描述
某游戲規則中,甲乙雙方戰斗,每一回合總能分出勝負,游戲規定:
1.失敗的一方要將自己體力值的1/4加給勝利的一方。
2.游戲開始時,甲的體力值是1000,乙的體力值是2000。
3.每一回合,甲乙勝利的概率均為50%。
求解4個回合后,雙方體力值之差小于1000的概率。
分析
每一回合結束,要么甲贏,要么乙贏。n個回合,那么有2^n種結果,采用回溯法從解空間中,中找出abs(a-b)<1000的結果即可。
代碼
#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
int i=1,count=0;
float m=1000,a=1000,n=1000,b=1000;
void backdate(int n);
int sum;
int main()
{scanf("%d",&sum);backdate(1);printf("%d",count);return 0;
}
void backdate(int i)
{float tmp;int j;if(i>sum){if(abs(a-b)<1000)count++;return ;}m=a,n=b; a+=b/4;b-=b/4;backdate(i+1);a=m,b=n;b+=a/4;a-=a/4;backdate(i+1); return;
}