C++ 生成不同的随机数

C++ 生成不同的随机数,c++,random,C++,Random,我想生成不同的随机数。我使用了srand和rand,但在我的输出中有些数字是相同的 这是我的输出: 如何使用srand生成不同的数字 #include<iostream> #include<time.h> #include <windows.h> int main(){ time_t t; std::vector<int> myVector; srand((unsigned)time(NULL)); for (int i = 0; i

我想生成不同的随机数。我使用了srand和rand,但在我的输出中有些数字是相同的

这是我的输出:

如何使用srand生成不同的数字

#include<iostream>
#include<time.h>
#include <windows.h>

int main(){
    time_t t;
std::vector<int> myVector;
srand((unsigned)time(NULL));

for (int i = 0; i < 40; i++){

    int b = rand() % 100;
    myVector.push_back(b);
    std::cout << myVector[i] << std::endl;
}
Sleep(50000);

}
#包括
#包括
#包括
int main(){
时间;
std::vector myVector;
srand((无符号)时间(NULL));
对于(int i=0;i<40;i++){
int b=rand()%100;
myVector.push_back(b);
std::cout您可以使用一组:

std::set<int> numbers;
while (numbers.size() < 40)
{
    numbers.add(rand() % 100);
}
std::设置编号;
while(number.size()<40)
{
添加(rand()%100);
}

然后,如果需要,将其复制到
向量中。

您可以轻松实现一组唯一的随机数:

#include<iostream>
#include<vector>

int main(){
    std::vector<int> myVector;
    srand((unsigned)time(NULL));

    for (int i = 0; i < 40; i++) {
        int b = rand() % 100;
        if(!std::find(std::begin(myvector),std::end(myvector),b)) {
            myVector.push_back(b);
            std::cout << myVector[i] << std::endl;
        }
    }
}
#包括
#包括
int main(){
std::vector myVector;
srand((无符号)时间(NULL));
对于(int i=0;i<40;i++){
int b=rand()%100;
如果(!std::find(std::begin(myvector),std::end(myvector),b)){
myVector.push_back(b);
std::cout这是一个统计(数学)问题。随机数可能彼此相同。如果您需要唯一的数字,您必须检查它们以前是否使用过。例如:

for (int i = 0; i < 40; i++){

    int b = rand() % 100;
    for (int j = 0; j < i; j++){
        if(myVector[j]==b)i--;
        else{
            myVector.push_back(b);
            std::cout << myVector[i] << std::endl;
        }
    }
}
for(int i=0;i<40;i++){
int b=rand()%100;
对于(int j=0;jstd::cout一种简单的方法是将0-99之间的所有数字添加到一个向量,并将其洗牌,然后您可以根据需要获得任意多个(最多100个)非重复随机数

#include <algorithm>
#include <chrono>
#include <iostream>
#include <random>
#include <vector>

int main(void) {

    std::vector<int> numbers;

    for(int i=0; i<100; i++)       // add 0-99 to the vector
        numbers.push_back(i);

    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::shuffle(numbers.begin(), numbers.end(), std::default_random_engine(seed));

    for(int i=0; i<40; i++)        // print the first 40 randomly sorted numbers
        std::cout << numbers[i] << std::endl;

}
#包括
#包括
#包括
#包括
#包括
内部主(空){
std::向量数;

对于(int i=0;isr),数字生成器可以给出相同的数字

您可以实施一种解决方案,删除重复项而不将其添加到向量中。例如:

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> myVector;
    srand((unsigned)time(NULL));

    while(myVector.size() < 40)
    {
        int b = rand() % 100;
        if ( !(std::find(myVector.begin(), myVector.end(), b) != myVector.end()))
        {
           myVector.push_back(b);
           std::cout << myVector.at(myVector.size()-1) << std::endl;
        }

    }
    Sleep(50000);

    return 0;
}
#包括
#包括
#包括
int main()
{
std::vector myVector;
srand((无符号)时间(NULL));
while(myVector.size()<40)
{
int b=rand()%100;
如果(!(std::find(myVector.begin(),myVector.end(),b)!=myVector.end())
{
myVector.push_back(b);

std::cout消除重复的一种简单方法是在
中使用
std::unique

下面是一个正在使用的示例:

#include <vector>
#include <iostream>
#include <algorithm>
#include <random>

int ran(int min, int max)
{
    std::random_device r;
    std::mt19937 gen(r());
    std::uniform_int_distribution<> dis(min, max);
    return dis(gen);
}

int main()
{
    const int fill_size = 10; 
    const int min = 1;        // min random number
    const int max = 100;      // max random number

    std::vector<int> vec;
    while (vec.size() != fill_size) {
        vec.emplace_back(ran(min, max)); // create new random number
        std::sort(begin(vec), end(vec)); // sort before call to unique
        auto last = std::unique(begin(vec), end(vec));
        vec.erase(last, end(vec));       // erase duplicates
    }

    std::random_shuffle(begin(vec), end(vec)); // mix up the sequence
    for (const auto& i : vec)                  // and display elements
        std::cout << i << " ";
}
#包括
#包括
#包括
#包括
整数运行(整数最小值,整数最大值)
{
std::随机_装置r;
标准:mt19937 gen(r());
标准:均匀分布图(最小值、最大值);
返回dis(gen);
}
int main()
{
常数int fill_size=10;
常量int min=1;//最小随机数
常量int max=100;//最大随机数
std::vec;
while(向量大小()!=填充大小){
vec.emplace_back(ran(min,max));//创建新的随机数
std::sort(begin(vec),end(vec));//在调用unique之前进行排序
auto last=std::unique(开始(vec),结束(vec));
擦除(最后,结束(vec));//擦除重复项
}
std::random_shuffle(begin(vec),end(vec));//混淆序列
for(const auto&i:vec)//和显示元素

std::你的意思是它每次执行时都会生成相同的随机序列吗?随机数仍然包含相同的数字,无法保证随机生成器引擎生成唯一的数字。你可以将结果推送到数组中,然后删除重复项。我该如何生成唯一的数字?如果你想要唯一的随机数您需要按照@Timothy Kanski的建议在生成后删除重复项,或者使用类似于
std::find
的方法来检查容器在循环期间是否已经包含生成的编号;或者使用不同的容器,例如
std::set
来避免出现等效值。+将值复制到向量,或者将被排序。@鲁镇或使用<代码> STD::unOrdEdEdTys如果C++ 11可用,而不是将数字添加到向量中,则可以正确地设置其大小,然后开始使用。