【发布时间】:2019-05-14 07:34:32
【问题描述】:
有人可以帮我生成 0-71 之间的随机数,同时保证它会覆盖从 0 到 71 的所有数字吗?
我尝试了以下方法,但有些数字出现了不止一次,有些则根本不出现。
int max= 71;
int min= 0;
std::random_device engine;
//initialise to -1 to make sure numbers are generated and stored properly
int randomNum = -1;
while(max> 0){
std::uniform_int_distribution<int> randomDistributed(min,max);
randomNum = randomDistrubuted(engine);
std::cout << randomNum << ", ";
max--;
}
更新:这个问题是因为我打算生成随机数而提出的,所以我可以打乱我自己的 LinkedList 数据结构的实现。我希望通过创建一个新列表并将 oldList->get(randomNumber) 元素中的元素添加到新的随机列表中来实现这一点。上面的代码实际上应该足以实现这一点,正如前面提到的当前句之前的最后一句。
【问题讨论】:
-
将数字存储在 unordered set 中,直到集合中有 73 个元素?
-
或
std::random_shuffle一组 [0..72] 并打印出来。 -
@Botje 他希望 72 也能加入 -> (0,73)
-
只要您的自定义 ADT 有迭代器就可以了。另一种选择:在[0..limit]中选择一个随机数
i,输出numbers[i](最初只是[0..72]),交换numbers[i]和numbers[limit],并减少limit。重复直到limit < 0。 -
这里有什么问题吗,还是我们可以假设原来的问题已经解决了?