gpt4 book ai didi

c++ - 用固定数字池中的随机唯一整数填充 vector

转载 作者:太空宇宙 更新时间:2023-11-04 16:18:36 29 4
gpt4 key购买 nike

我想用随机整数填充一个 vector ,但其中不能有重复项。

首先,我有这段代码可以将 numberOfSlots 个介于 0 和 7 之间的随机整数放入 vector 中(numberOfSlots 可以是 2 到 20):

srand((unsigned int)time(NULL));
unsigned int min = 0;
unsigned int max = 7;
std::vector<unsigned int> v;

for (int i = 0; i < numberOfSlots; i++) {
unsigned int rdm = std::rand() % (max - min + 1) + min;
v.push_back(rdm);
}

这是允许重复整数的代码。这工作正常!

现在我想更改代码,以便从相同的可能整数随机池(minmax)生成的随机整数仅在不是时才添加已经在 vector 中。

因此,如果例如 numberOfSlots 为 5,则 vector 将具有 5 个从池中随机选择但不相同的条目,例如7, 1, 3, 5, 0。如果 numberOfSlots 为 8,则 vector 将为例如 3, 1, 2, 7, 6, 0, 4, 5。

我知道如何打乱 vector 和其他东西,但我无法让它工作。我想我必须使用一个 while 循环并检查 vector 中所有已经存在的整数与要添加的新随机数,如果它已经在那里生成一个新的随机数并再次检查,等等,但我不知道

我是初学者,这真的很难。有人可以给我提示吗?我将不胜感激......非常感谢

最佳答案

您可以用值 0..N-1(或您的池值)填充 vector ,然后对其进行洗牌。参见示例:

// Initialize
for(i = 0; i < N; i++)
arr[i] = i;

// shuffle
for(i = N - 1; i > 0; i--) {
j = rand() % i;
swap(arr[i], arr[j]);
}

关于c++ - 用固定数字池中的随机唯一整数填充 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781933/

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