使用一个罕见数字生成两个数字之间的随机数

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

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

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

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

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

谢谢

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

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

  • 如果你得到1-5,则计为1
  • 如果你得到6-10,则计为2
  • 如果你得到11-15,则计为4
  • 如果你得到16-20,则计为5
  • 如果你得到21,那就算是3

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

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

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

  • 1/4表示1
  • 1/4表示2
  • 1/4为4
  • 5点1/5
  • 1/20为3

这将生成一个如下表:

LCM = 20

  • 1-5 = 1(如条款 – 5/20)
  • 6-10 = 2(5/20)
  • 11-15 = 4(5/20)
  • 16-19 = 5(4/20)
  • 20 =(1/20)

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

一个易于理解的选项:

  • 生成一个数字以确定您是否要返回稀有数字(例如,生成[0-99]范围内的数字,如果为0,则返回罕见数字
  • 如果你进入这一步,你将返回一个非稀有数字:继续生成正常范围内的数字,直到你获得任何非稀有数字,然后返回

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

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

 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 %d\n",random_number(0,5)); printf("Min : 100 Max : 1000 %d\n",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 

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