如何按给定百分比创建概率?

我正在尝试为游戏创建基于百分比的概率。 例如,如果一个项目有45%的几率遭到致命一击,那么这必然意味着它有50个点击中的45个是至关重要的。

首先,我尝试使用一个简单的解决方案:

R = new Random(); int C = R.Next(1, 101); if (C <= ProbabilityPercent) DoSomething() 

但是在100次迭代中,例如48%的可能性,它在100分中给出40-52。同样适用于49,50,51。因此,这些“百分比”之间没有区别。

问题是如何设置例如50的百分比,并严格地随机获得50的100? 对于罕见项目查找的概率而言,这是一个非常重要的事情,有机会增加找到项目的机会。 所以1%的buff会很敏感,因为现在不是。

对不起,我的英语不好。

你需要只考虑重复滚动的均匀分布。

你不能查看超过100卷,因为强制准确地产生45卷不会是随机的 。 通常,这种卷应该表现出“缺乏记忆”。 例如,如果你掷骰子寻找一个6,你有六分之一的机会。 如果你滚动它5次,并且没有得到6 – 那么:在下一次滚动中获得6的机会不是1.它仍然是1中的6。因此,你只能看看它遇到了多少当你在统计上大量的事件中摊销时,你的期望…… 100,000说。

基本上:你当前的代码很好。 如果用户知道(因为他们已经达到55次没有关键),接下来的45次点击必须是关键的,那么它就不再是随机的,他们可以对系统进行游戏。

也; 45%的致命一击几率似乎有点高; p

我正在尝试为游戏创建基于百分比的概率。 例如,如果一个项目有45%的几率遭到致命一击,那么这必然意味着它有50个点击中的45个是至关重要的。

不,那不是真的。 你完全错过了概率概念。 你不想要“基于百分比的概率”,你想要一个“100个样本的基于百分比的随机分布”。

你需要的是一个“一揽子活动”,其中45个是“冰冷的”,其中55个是“非神秘的”。 一旦您从行李中选择了一个活动,您只有剩下的活动可以在下次选择。

你可以这样建模:

 Initialize two integer variables Crytical and NonCrytical so that they sum exactly 100 according to the desired percetnages. Get a random value from 1 to Crytical+NonCrytical If the random value is less than the value of Crytical, let you hit be crytical and: Crytical = Crytical -1 Else, let your hit be non-crytical NonCrytical = NonCrytical-1 End If Repeat until Crytical+NonCrytical = 0 

由于我不是C#的专家,我将使用C ++函数轻松但仍然适用于任何语言。

rand() – 随机数生成器。

 //33.34% double probability = 0.3334; //divide to get a number between 0 and 1 double result = rand() / RAND_MAX; if(result < probability) //do something 

我已经使用这种方法来创建非常大的渗透网格,并且它非常适合精度值。

问题是,使用Random您可能只想初始化此类一次。

这是因为Random使用系统时间作为生成随机数的种子。 如果您的循环非常快,则可能会发生多个Random-instances使用相同的种子并因此生成相同的数字。

如果您怀疑发生这种情况,请检查生成的数字。

除此之外,随机性固有的是它不会给你准确的结果。 这意味着即使有50/50的可能性,也可能发生100个“头”或“尾巴”的序列给出“头部”100次。

你唯一能做的就是创建一次Random-instance并使用结果; 否则你不应该使用随机。