我正在尝试使用数组来修正一个程序,它可以获得0到24之间的随机数,但它们只能出现一次.我知道如何生成随机数,我只是坚持如何检查数字中是否已存在数字.我尝试生成一个新的rand()%25并将其与数组中的占位符进行比较,如果它不存在则将新的随机数放在那里,但它不起作用.
void MultiU (){
int size = 5;
int array[5];
srand(time(0));
for (int index = 0; index < size; index++){
exists[index] = rand() %25;
}
}
Run Code Online (Sandbox Code Playgroud)
我是使用数组和rand()进行编程的新手.我希望有人可以指导我朝着正确的方向前进.
std::unordered_set是你的朋友.它不允许/插入重复项,您可以利用这一事实获得5个不同的数字.当集合大小为5时,保证包含5个不同的元素.
std::unordered_set<int> s;
while (s.size() < 5) {
s.insert(rand() % 25);
}
Run Code Online (Sandbox Code Playgroud)
这是获取没有重复的随机数列表的一般方法:
#include <algorithm>
#include <iostream>
#include <random>
#include <vector>
int main() {
std::vector<int> vals;
for (size_t i = 0; i < 25; ++i) {
vals.push_back(i);
}
std::shuffle(vals.begin(), vals.end(), std::mt19937());
for (auto v : vals) {
std::cout << v << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这样做是低效的,然后只提取前五个数字.但是,随着可能的随机数列表变大(并且您想要选择更多的随机数),这种方法将比The Paramagnetic Croissant更有效.
我还应该补充一点,你不应该使用rand().或者尝试使用rand()模数来获得固定范围的随机数.它们将无法正确分发!