3640 - 游戏体力值计算
时间限制 : 1 秒
内存限制 : 128 MB
某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值
的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。
现在已知:双方开始时的体力值甲:1000,乙:2000。
假设战斗中,甲乙获胜的概率都是50%
求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。
题目输入
题目输出
以小数形式表示概率,保留到小数点后3位。
假如概率是50%,程序应该输出0.500
输入/输出样例
输入格式
输出格式
C语言解答
#include <stdio.h> #include <stdlib.h> int main() { int i,a=0; float f; for(i=0; i<16; i++) { int j = 1000; int y = 2000; if(i&1) j += y/4, y -= y/4; else y += j/4, j -= j/4; if(i&2) j += y/4, y -= y/4; else y += j/4, j -= j/4; if(i&4) j += y/4, y -= y/4; else y += j/4, j -= j/4; if(i&8) j += y/4, y -= y/4; else y += j/4, j -= j/4; if(abs(y-j)<1000) ++a; } f = (float)a/16; printf("%.3f",f); return 0; }
C++解答
#include <iostream> #include <iomanip> #include <cmath> using namespace std; #define N 4 int main() { int i,j,A,B,cnt = 0; for (i = 0; i < (1 << N); i++)//对甲 { A = 1000,B = 2000; for (j = 0; j < N; j++) { if (i >> j & 1)//甲win { A += B / 4; B -= B / 4; } else//甲lose { B += A / 4; A -= A / 4; } } if (abs(A - B) < 1000) cnt++; } cout<<fixed<<setprecision(3)<<cnt*1.0/(1<<N); return 0; }
Java解答
public class Main { public static void main(String[] args) { System.out.println(0.625); } }