这只是好奇心的问题,我在想,以防万一我开始使用
c ++ rand()函数功能srand(time(0))
,它将生成所有不同的随机数,所以我已经尝试过会发生什么,当给定数组的sizeof大得多时,给定的两个整数范围内的元素数量,例如,数组声明为int a [100],并且来自[15 75]的随机数范围,我觉得这个代码应该给我错误,就像有更多的数字而不是范围或类似的东西,但它生成随机重复值为什么?这是代码
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
int main(){
int min=15;
int max=75;
int a[100];
srand(time(0));
for (int i=0;i<100;i++) {
a[i]=min+rand()%(max-min+1);
}
for (int i=0;i<100;i++) {
cout<<a[i]<< " ";
}
return 0;
}
答案 0 :(得分:3)
看起来你真正想要的是一个唯一数字列表,但是按随机顺序排列?这与生成伪随机数完全不同。
在这种情况下,您可以像这样首先生成数组:
std::vector<int> myNumbers;
myNumbers.reserve(50);
int i = 25;
std::generate_n(back_inserter(myNumbers),50,[&i]() { return i++; });
然后像这样洗牌:
std::random_shuffle(myNumbers.begin(), myNumbers.end());
请注意,大多数时候你应该在调用shuffle之前播种随机生成器,因为它在内部会生成随机数来进行混洗。
在您的示例中,您只需使用25-75范围内的随机数填充数组(100个元素)。这肯定会给出重复的数字,甚至有一个(小的)机会,你将总是得到相同的数字,就像你有可能用一个公平的骰子扔'6'100次。你只需滚动一个(非常大的)骰子,将第一个结果放入插槽[0],再次滚动,将其放入[1],....没有州,所以可以并且将会重复相同的数字。