-3

对不起,如果我的标题不够清楚。我举个例子。我们的函数是这样的:

C:

int main()
{
for(i=0;i<10;i++)
    {
        printf("%d",func(i));
    }
}

int func(int b)
{
if(b>=0 && b<7)
   return 70;
else
   return 30;
}

当“b”为“rand() % 10”时,此函数 (b) 将以 70% 的可能性返回 70,以 30% 的可能性返回 30。但是,必须有一个更实用的方法。如果“那种方式”存在,我在 C(也可以是 C++)和 AS3 中都需要它。感谢您的回复。


我只是有时间登录并查看回复。你玩过 paradox interactive 的游戏吗?喜欢欧陆风云3?在那个游戏中有很多不同的随机化算法。例如,每个都有 1/3 的可能性,你可以得到好东西,什么都没有或坏东西。我想开发一个必须具有类似随机化算法的游戏。我想要一个函数获得阈值 0 和 1 之间的输入,并返回一个预定义的结果,或者我可以使用一个简单的 switch 语句来触发该结果的值

像这样的东西:

在 AS3 中:

Function randomize(poss:Number):function //here i may need to have more consequences than two. poss value can be an array instead of being a number.
{
Number a = Math.random()
If(a>poss)
Return func1;
Else
Return func2;
}

这里 func1 和 func2 是具有相同输入类型但任务不同的函数对象,我将使用返回的函数,如下所示:

Function onClick(evt:Event):void
{
var randFunction:Function=new Function();
randFunction = randomize(0.35);
randFunction();
}

但是,我不想像这个实例那样为我需要“加权可能性”的每个场合都硬编码。

PS:我不想让你为我编写代码,但对如何在 C 和 AS3 中解释加权可能性有一些很好的想法。如果你不打算贡献,那么就不要回复。

4

3 回答 3

1

我认为人们不理解您的问题(公平地说,您是啰嗦又不清楚),但答案很简单。将 Math.random 存储在一个值中。

var random = Math.random();

if (random > 0.33)
   trace("good")
else if (random > 0.66)
   trace ("nothing")
else trace ("bad")

我认为任何形式的随机化都不会比这更复杂。

于 2015-01-26T15:43:40.443 回答
1

尝试阅读伯努利分布并实现它。

从 [0,1] 生成随机变量,如果低于则.7返回,x否则返回y

于 2013-08-06T09:02:31.500 回答
0

ActionScript 3 版本如下所示:

function example():int
{
    if(Math.random() >= 0.7) return 70;
    return 30;
}

trace(example()); // Either 30 or 70.
于 2013-08-06T09:26:31.960 回答