一小道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 ^ )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值