【回溯法】游戏竞赛

题目描述

某游戏规则中,甲乙双方战斗,每一回合总能分出胜负,游戏规定:
1.失败的一方要将自己体力值的1/4加给胜利的一方。
2.游戏开始时,甲的体力值是1000,乙的体力值是2000。
3.每一回合,甲乙胜利的概率均为50%。
求解4个回合后,双方体力值之差小于1000的概率。

分析

每一回合结束,要么甲赢,要么乙赢。n个回合,那么有2^n种结果,采用回溯法从解空间中,中找出abs(a-b)<1000的结果即可。

代码

#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
int i=1,count=0;
float m=1000,a=1000,n=1000,b=1000;
void backdate(int n);
int sum;
int main()
{
    scanf("%d",&sum);
    backdate(1);
    printf("%d",count);
    return 0;
}
void backdate(int i)
{
    float tmp;
    int j;
    if(i>sum)
    {
        if(abs(a-b)<1000)
            count++;
        return ;
    }
    m=a,n=b;        
    a+=b/4;
    b-=b/4;
    backdate(i+1);
    a=m,b=n;
    b+=a/4;
    a-=a/4;
    backdate(i+1);  
    return;
}
全部评论

相关推荐

勇敢的突尼斯海怪选钝...:楼主这拒意向话术好得体呀 !求问HR回复态度咋样呀
点赞 评论 收藏
分享
12-01 13:39
已编辑
东北大学 Java
Rain_Codin...:没事,反正都是吹牛逼的,另一个实习生说能实习到毕业,说不定干两个月就跑了,亏的还是他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务