查找给定范围内的随机数,并排除某些可能的数字

Mic*_*ael 1 language-agnostic random algorithm

假设您在范围内给出范围和几个数字(例外).现在您需要在给定异常之外的范围内生成随机数.

例如,如果range = [1..5]和exceptions = {1,3,5},则应该以相等的概率生成2或4.

我应该用什么逻辑来解决这个问题?

Sav*_*ave 5

如果你没有任何约束,我想这是最简单的方法:创建一个包含有效值的数组,a[0]...a[m].返回a[rand(0,...,m)].

如果您不想创建辅助数组,但可以计算原始范围内的异常数e和元素nr=rand(0 ... n-e),则可以简单地生成一个随机数,然后使用不会勾选的计数器查找有效元素例外情况,并在等于时停止r.