【C语言】回合制战斗

# 一小道C语言题带来的乐趣

==要用游戏的玩法打败游戏的情景题!==
对于以下题目:
某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。现在已知:双方开始时的体力值甲:1000,乙:2000。假设战斗中,甲乙获胜的概率都是50%,求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。
用基础模拟算法来解决:

#include<stdio.h>
#define all 16//所有可能的结果数目
int exchange(double * x,double * y) //x为吸收血量方 
{
    double t;
    t=(*y)*0.25;(*x)+=t;(*y)-=t;
    return 0; 
} 
int main()
{
    int js=0;
    double x=1000,y=2000;
    //美好的游戏模拟开始了
    for(int i=0;i<=1;i++)
        {
            double ax=x,ay=y;//存档,防止数据丢失
            i?exchange(&x,&y):exchange(&y,&x);  //i判断甲(x)是否赢得一回合,并改变血条 
            for(int i=0;i<=1;i++)
            {
                double bx=x,by=y;
                i?exchange(&x,&y):exchange(&y,&x);
                for(int i=0;i<=1;i++)
                {
                    double cx=x,cy=y;
                    i?exchange(&x,&y):exchange(&y,&x);
                    for(int i=0;i<=1;i++)
                    {
                        double dx=x,dy=y;
                        i?exchange(&x,&y):exchange(&y,&x);
                        if(x-y<1000&&x-y>-1000) js++;
                        x=dx;y=dy; //重新读档,开始下一轮模拟 
                    }
                    x=cx;y=cy;//读档,余同
                }
                x=bx;y=by;
            }
            x=ax;y=ay;
        }
    printf("四回合后体力值差<1000的理论概率:\n%f",js*1.0/all);
    return 0;
}

==是不是特像打游戏刷关呢?( ^ v ^ )==

猜你喜欢

转载自www.cnblogs.com/BAIDI-HOME/p/12298186.html