生成不同的随机数

Mic*_*lle 2 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 < 40; i++){

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

}
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 6

一种简单的方法是将 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;

}
Run Code Online (Sandbox Code Playgroud)

  • 我们可以一开始就正确设置其大小,然后使用 [`std::iota`](https://en.cppreference.com/w/cpp/algorithm/iota),而不是循环将数字添加到向量中)。 (2认同)