c/c++语言开发共享使用一个罕见数字生成两个数字之间的随机数

我可以用c生成两个数字之间的随机数。

arc4random()%(high-low+1)+low; 

那么现在我的要求是……我想做一个罕见的数字….这意味着如果

高= 5,低= 1,稀有= 3,

超过3将很少出现1,2,4和5 …

谢谢

    您可以使用表格来计算最终掷骰,类似于笔和纸RPG执行相同类型的计算:

    滚动1 D 21(很可能是代码)。

    此选项的优点是您可以深入了解您正在处理的确切概率。 您可以感受到每个数字的确切罕见或常见,并且与其他数字相比,您可以细致地控制每个数字的常见程度。

    您还可以使用分数来生成表格。 使用最小公倍数确定公共基数。 该基数是您需要的最大随机数。 然后,将所有分数按照相似的条件排列。 使用生成的分子来确定表中每个数字的范围大小。

    使用这种自动化解决方案,输入数字相互之间非常容易理解。 例如:

    这将生成一个如下表:

    LCM = 20

    关于LCM的更多内容: http : //en.wikipedia.org/wiki/Least_common_multiple

    一个易于理解的选项:

    还有其他替代方法只需要您生成一个数字,但上面的感觉就像是最简单的编写和理解。

    您可以根据概率创建一个包含数字的数组:

     list = (1, 1, 2, 2, 3, 4, 4, 5, 5); return list.itemAtIndex(random() % list.count()); 

    这不是很优雅,但如果概率变得更复杂,它可以很容易地进行扩展。

    所有概率的总和必须为1.现在我们在这里使用有限范围内的离散概率进行处理,因此我们在(这里)查看具有某种分布的5种可能性,将它们称为p1,p2,p3,p4和p5其中1。

    f0 = 0 f1 = p1 f2 = f1 + p2 f3 = f2 + p3 f4 = f3 + p4 f5 = f4 + p5且必须为1

    生成一个从0到1的随机数,我们假设它不能正好1.查看适合其上限的f值,即随机事件的值。 也许吧

    f1 = 0.222 f2 = 0.444 f3 = 0.555 f4 = 0.777 f5 = 1

    如果您的随机数是0.645,那么您已经生成了4事件。 有了上述内容,您生成3的机会比其他任何机会少一半。 我们可以减少它的可能性,例如:

    f1 = 0.24 f2 = 0.48 f3 = 0.52 f4 = 0.76 f5 = 1

    0.24可能是其他人,只有0.04的3。

    让我们来看看。 首先,我们使用srand()函数为随机化器播种。 基本上,计算机可以根据提供给srand()的数字生成随机数。 如果给出相同的种子值,则每次都会生成相同的随机数。

    因此,我们必须使用始终在变化的值为随机化器播种。 我们通过使用time()函数向其提供当前时间的值来实现此目的。

    现在,当我们调用rand()时,每次都会生成一个新的随机数。

     #include int random_number(int min_num, int max_num); int main(void) { printf("Min : 1 Max : 30 %dn",random_number(0,5)); printf("Min : 100 Max : 1000 %dn",random_number(100,1000)); return 0; } int random_number(int min_num, int max_num) { int result=0,low_num=0,hi_num=0; if(min_num 

     while true generate a random number if it's not the rare number, return it generate a second random number - say from 1 to 100 if that second number's <= the percentage chance of the rare number compared to the others, return the rare number 

    注意:对于常见情况或返回非稀有数字,这是快速的。

      以上就是c/c++开发分享使用一个罕见数字生成两个数字之间的随机数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549248.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐