gpt4 book ai didi

c++ - 在 C++ 中生成唯一随机数

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:11 25 4
gpt4 key购买 nike

这里是 C++ 初学者。我在下面有这段代码。不仅如此,但这是我需要帮助的部分。我需要生成随机数 ( 0 - 9 ) 并将其推回到 vector 中。我希望这些随机数是唯一的。我怎么做?另外,我不能使用 std::find(std::begin(vector),std::end(vector),a)。非常感谢大家。

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {

int digit = 0;
int randNo = 0;
cin >> digit;
srand((unsigned)time(NULL));
vector <int> randG(digit);
for(int i = 0; i < randG.size(); i++){
randNo = rand() %10;
randG.at(i) = randNo;
}
}

最佳答案

如果您不太关心效率,并且希望在不从 {a,a+1,...,b} 进行替换的情况下均匀采样,您可以创建一个 vector<int> vstart其中 vstart[i]=a+i .之后,如果你想要 k 个样本并将它们存储在 v_samples 中, 生成一个随机数 numrand在 [0, v.size() ), 推送 vstart[numrand]进入vsamples , 并从 vstart 中删除样本条目(删除对应“不替换”部分),重复k次。删除可能代价高昂,因此改组 vstart并选择混洗 vector 的前 k 个条目。

洗牌时要小心,因为你可能不会得到统一的洗牌:https://www.i-programmer.info/programming/theory/2744-how-not-to-shuffle-the-kunth-fisher-yates-algorithm.html .最好的方法是使用 <algorithm> 中的随机播放功能。图书馆:http://www.cplusplus.com/reference/algorithm/shuffle/ ,或者自己编写一个经过验证的洗牌(Knuth 洗牌是解决这个问题的经典方法)。

关于c++ - 在 C++ 中生成唯一随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com