(๑•̀ㅂ•́)و✧欢迎来到微凉的魔力小站,初来乍到,希望各位多多包含。我也会将自己的分享做到最好,同大家一起努力进步!冲鸭ヽ( ̄ω ̄( ̄ω ̄〃)ゝ                                

BAIDI_CODER

Share, Communicate and Grow 学海无涯,回头是岸 🤣

导航

【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 ^ )

posted on 2020-02-12 11:01  BAIDI_CODER  阅读(487)  评论(0)    收藏  举报