首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特定随机数发生器

特定随机数发生器
EN

Stack Overflow用户
提问于 2013-03-07 22:28:41
回答 1查看 280关注 0票数 0

我需要在一个特定的范围之间生成数字,在第一个周期之后,如果数字不适合,我需要从范围中删除它。

示例:

我要在1-55范围内生成随机数。我想要数字24,但是是通过随机发生器生成的。在第一个周期之后,随机发生器产生了第4个。在下一个循环中,我想从相同的范围生成随机数,但不包括4号。所以范围是- 1,54 / {4}。如果在下一个周期产生第28号,范围将改为- 1,54 /{4, 28 }。循环将重复,直到不生成数字24。

我需要它作为我的进化算法。如果我使用大范围,那么需要很长时间才能通过随机数生成算法生成所需的数字。如有任何建议,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-03-07 22:36:39

从包含全部范围的数组开始:

代码语言:javascript
复制
int range[55];
std::iota(range, range+55, 1);

n = 55开始。

现在,在每一步:

  • i0选择一个随机数n-1
  • range[i]range[n-1]交换。
  • 减量n

如果您选择的索引值为24,那么您就完成了。24之前选定的值位于数组的右侧,其余未选定的值位于左侧。

当然,我认为你需要知道这些价值观。如果您只需要生成值24,那么int generate24() { return 24;}就应该这样做。如果您只需要知道生成24所需的步骤有多少,那么在155的范围内是均匀分布的,所以您可能可以用一个随机数生成来伪造它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15283035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档