3640 - 游戏体力值计算

某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值

的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;	
}

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题