标题:帮忙编个程序好吗 或者告诉思路
只看楼主
njzhangyuhao
Rank: 2
等 级:论坛游民
帖 子:197
专家分:35
注 册:2010-11-20
结帖率:100%
 问题点数:0 回复次数:9 
帮忙编个程序好吗 或者告诉思路
某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。
现在已知:双方开始时的体力值甲:1000,乙:2000。
假设战斗中,甲乙获胜的概率都是50%
求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。
搜索更多相关主题的帖子: 游戏规则 胜利 
2011-04-29 19:46
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
兄弟 我这10各题里面有3各没做出来

对于这个题要用二叉树  去创建 然后去遍历它

得到结果 我就是这样做的

                                         
===========深入<----------------->浅出============
2011-04-29 19:53
njzhangyuhao
Rank: 2
等 级:论坛游民
帖 子:197
专家分:35
注 册:2010-11-20
得分:0 
怎么办啊 我很焦虑
2011-04-29 19:56
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
+QQ 553069938  语音

                                         
===========深入<----------------->浅出============
2011-04-29 20:00
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
在37.5%左右吧。这个题我也有点模糊。

[ 本帖最后由 hjywyj 于 2011-4-29 20:28 编辑 ]
2011-04-29 20:20
aliuwr
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2011-4-30
得分:0 
提供下我的代码

#define MAX_DEPTH 4

int goodnum = 0;    //满足条件的数量
int allnum = 0;

void calc(int depth,float a, float b);

int main(int argc, char **argv)
{
    calc(0, 1000, 2000);

    printf("%d / %d = %f\n", goodnum , allnum, (float)goodnum / allnum);
    return 0;   
}

void calc(int depth ,float a, float b)
{
    if (MAX_DEPTH == depth++)
    {
        allnum++;
        if (fabs(a - b ) >=1000)
        {
            goodnum++;
        }
        return;
    }
    calc(depth, a * ((float)1 * 3 / 4), b * ((float)1 * 5 / 4));
    calc(depth, a * ((float)1 * 5 / 4), b * ((float)1 * 3 / 4));
}
2011-04-30 23:54
zq410335897
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-1
得分:0 
下面是我编的:
#include <iostream>
#include <cmath>
using namespace std;
#define N 16
float count[N]={0.0};
int i=0;

void f(float a,float b,int n)
{
    if(4==n)
    {
        count[i++]= fabs(b-a) ;
    }
    else
    {
        f( a-a*0.25 , b+a*0.25 , n+1) ;
        f( a+b*0.25 , b-b*0.25 , n+1 ) ;
    }
}

int main()
{
    float a=1000.0,b=4000.0;
    int n=0,k=0;
    f(a,b,n);
    for(int j=0;j<N;j++)
    {
//        cout<<count[j]<<" ";
        if( count[j]<1000 )
        {
            k++;
        }
    }
    cout<<endl;
    float gailv;
    gailv=(float)k/N;
    cout<<gailv<<endl;
    return 0;
}
2011-05-01 23:14
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
回复 2楼 laoyang103
老杨都在做的题,我很感兴趣,能给我一份否?老杨。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-05-01 23:49
zq410335897
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-1
得分:0 
不好意思,上面乙弄成4000了。
下面是我编的:
#include <iostream>
#include <cmath>
using namespace std;
#define N 16
float count[N]={0.0};
int i=0;

void f(float a,float b,int n)
{
    if(4==n)
    {
        count[i++]= fabs(b-a) ;
    }
    else
    {
        f( a-a*0.25 , b+a*0.25 , n+1) ;
        f( a+b*0.25 , b-b*0.25 , n+1 ) ;
    }
}

int main()
{
    float a=1000.0,b=2000.0;
    int n=0,k=0;
    f(a,b,n);
    for(int j=0;j<N;j++)
    {
//        cout<<count[j]<<" ";
        if( count[j]<1000 )
        {
            k++;
        }
    }
    cout<<endl;
    float gailv;
    gailv=(float)k/N;
    cout<<gailv<<endl;
    return 0;
}
2011-05-01 23:53
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
感觉就是个数学题嘛。这就是古典概型呗。
2011-05-02 12:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-338397-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040627 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved