小算法求助(关于概率) 模拟一个概率事件:程序从入口进来后可能会执行三个分支A、B、C,其中执行A的概率是80%、执行B的概率是50%,执行C的概率是20%。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数组里放8个A,5个B,2个C,随机(0-14) 把8个A,5个B,2个C 放入不排序的数组中 再直接遍历判断就可以了 一个事件要分成A:0.8、B:0.5、C:0.2,从逻辑上说A与B中有共同符合的条件,存在两个不确定因素首先共同条件占整个事件比从0.00...01到0.5都有可能当是共同条件,LZ要如何执行?坐等高手解答 楼主的命题很有意思,首先分析下它的数学模型。假设是在一个系统内,三个事件的概率分别为 80%,50%,20%,这是不可能的,因为全部加起来总的概率大于 1 了。就好像下面的方程组在实数范围内应该是无解的一样:a/(a+b+c)=0.8b/(a+b+c)=0.5c/(a+b+c)=0.2所以我认为三个事件应该是相互独立互不干扰的。算法设计:首先取得一个随机数,然后对这个随机数对 10 取模,根据余数确定事件是否执行(注意不是根据余数确定执行哪个事件)。并且由于三个事件互相独立,每判定一次是否执行事件就需要取一次随机数。所以在程序中不能使用 switch 语句,只能使用 if() else 语句判断。int i;int RandomInt() //定义一个取得随机数的函数{ ......}if(((i=RandomInt()%10)==8)||(i==9)) //余数为8或者9时{ //执行概率为20%的事件3}else if(((i=RandomInt()%10)>0)&&(i<6)) //重新取得随机数并对10取模进行判定是否在0-6之间{ //执行概率为50%的事件2}else if(((i=RandomInt()%10)>=0)&&(i<=8)) //重新取得随机数并对10取模进行判定是否为0-8{ //执行概率为80%的事件}因为前两个事件的概率太高,为了保证低概率的事件也有机会执行,我先判定了低概率的事件,还有上面的代码不一定严谨,只是为了方便说明问题。最后,如果说是同一系统下的三个事件,比如说概率为:20%。30%,50%,就只需要取一次随机数的模。依次判定就可以了,并且可以使用switch语句。 请大神帮帮忙 一道JAVA多线程题 求高人指点如何使用Jtree实现树,并支持节点拖拽 getLocation()带参数的问题 登陆后如何处理登陆窗口 关于 java 的几个问题 怎么就是连不上!! 要用OpenFileDialog控件的什么方法才能得到它返回的文件名? 数组问题: 字符串是"abcd},{abcd", 如何将 "},{"替换成"###"? 如何完成transient反序列化呢? 如何在java中建立orcal数据库 并填写主键自增的trigger
随机(0-14)
再直接遍历判断就可以了
首先共同条件占整个事件比从0.00...01到0.5都有可能
当是共同条件,LZ要如何执行?
坐等高手解答
假设是在一个系统内,三个事件的概率分别为 80%,50%,20%,这是不可能的,因为全部加起来总的概率大于 1 了。就好像下面的方程组在实数范围内应该是无解的一样:
a/(a+b+c)=0.8
b/(a+b+c)=0.5
c/(a+b+c)=0.2
所以我认为三个事件应该是相互独立互不干扰的。算法设计:首先取得一个随机数,然后对这个随机数对 10 取模,根据余数确定事件是否执行(注意不是根据余数确定执行哪个事件)。并且由于三个事件互相独立,每判定一次是否执行事件就需要取一次随机数。所以在程序中不能使用 switch 语句,只能使用 if() else 语句判断。int i;
int RandomInt() //定义一个取得随机数的函数
{
......
}
if(((i=RandomInt()%10)==8)||(i==9)) //余数为8或者9时
{
//执行概率为20%的事件3
}else if(((i=RandomInt()%10)>0)&&(i<6)) //重新取得随机数并对10取模进行判定是否在0-6之间
{
//执行概率为50%的事件2
}else if(((i=RandomInt()%10)>=0)&&(i<=8)) //重新取得随机数并对10取模进行判定是否为0-8
{
//执行概率为80%的事件
}因为前两个事件的概率太高,为了保证低概率的事件也有机会执行,我先判定了低概率的事件,还有上面的代码不一定严谨,只是为了方便说明问题。最后,如果说是同一系统下的三个事件,比如说概率为:20%。30%,50%,就只需要取一次随机数的模。依次判定就可以了,并且可以使用switch语句。