首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

关于概率的有关问题

2012-04-05 
关于概率的问题问题:某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要

关于概率的问题
问题:
  某游戏规则中,甲乙双方每个回合的战斗总是有一方胜利,一方失败。游戏规定:失败的一方要把自己的体力值的1/4加给胜利的一方。例如:如果双方体力值当前都是4,则经过一轮战斗后,双方的体力值会变为:5,3。
现在已知:双方开始时的体力值甲:1000,乙:2000。
假设战斗中,甲乙获胜的概率都是50%
求解:双方经过4个回合的战斗,体力值之差小于1000的理论概率。

  看后没什么思路,这个概率该怎么求?请说下各位思路,最好用伪代码写,不要统统文字描述。

我还是随机模拟了100w次,看下概率。大概是59.00多
代码:

C/C++ code
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <math.h>#define TEST_NUM 1000000//模拟次数intmain(){    float                a = 1000; //a体力                float                total = 3000; //总体力    float                b;    int                good_num = 0; //结果两者差值小于1000的次数    long int                i;    int                j;    srand((unsigned int)time((time_t *)0));    for(i = 0; i < TEST_NUM; ++i) {        for(j = 0; j < 4; ++j)             a = rand()%2 ? a + (total -a)/4 : 3 * a/4; //rand()%2 生成0,1概率各为50%        b = total -a;        if (fabs(a-b) < 1000) //符合则计数            good_num++;    }    printf("%.2f\n", (float)(good_num)/TEST_NUM*100);    exit(0);}


[解决办法]
没空写代码,思路:因为战斗四次,胜败是有序的,所有最后可能有2的4次方16种结果,并且每种结果发生的概率是相同的(幸亏是相同的),这样可构成一棵深度为5(第一层为还没战斗时状态)的满二叉树,统计下最后十六种相差1000以内的个数x除以16就可以了。

热点排行