我可以用c生成两个数字之间的随机数.
arc4random()%(high-low+1)+low;
Run Code Online (Sandbox Code Playgroud)
那么现在我的要求是......我想做一个罕见的数字....这意味着如果
高= 5,低= 1,稀有= 3,
超过3将很少出现1,2,4和5 ...
谢谢
Mer*_*ham 26
您可以使用表格来计算最终掷骰,类似于笔和纸RPG执行相同类型的计算:
滚动1 D 21(很可能是代码).
此选项的优点是您可以深入了解您正在处理的确切概率.您可以感觉到每个数字的确切罕见或常见,并且与其他数字相比,您可以细致地控制每个数字的常见程度.
您还可以使用分数来生成表格.使用最小公倍数确定公共基数.该基数是您需要的最大随机数.然后,用相同的术语表示所有分数.使用生成的分子来确定表中每个数字的范围大小.
使用这种自动化解决方案,输入数字相互之间非常容易理解.例如:
这将生成一个如下表:
LCM = 20
关于LCM的更多内容:http://en.wikipedia.org/wiki/Least_common_multiple
Jon*_*eet 11
一个易于理解的选项:
还有其他替代方法只需要你生成一个数字,但上面的感觉就像是最简单的编写和理解.
您可以根据概率创建一个包含数字的数组:
list = (1, 1, 2, 2, 3, 4, 4, 5, 5);
return list.itemAtIndex(random() % list.count());
Run Code Online (Sandbox Code Playgroud)
这不是很优雅,但如果概率变得更复杂,它可以很容易地进行扩展.