C++ C++;随机数发生器

C++ C++;随机数发生器,c++,random,srand,C++,Random,Srand,我正在写一份彩票申请书。我有一个名为generateLotteryNumbers的函数,它接收一个数组并用5个随机数填充该数组。我想做的是让这个函数每次调用时都产生一组不同的随机数 void generateLotteryNumbers(int lotteryNumbers[]) { srand (time(NULL)); const int arraySize = 5; int index = 0; while (index < arraySize)

我正在写一份彩票申请书。我有一个名为
generateLotteryNumbers
的函数,它接收一个数组并用5个随机数填充该数组。我想做的是让这个函数每次调用时都产生一组不同的随机数

void generateLotteryNumbers(int lotteryNumbers[])
{

    srand (time(NULL));
    const int arraySize = 5;
    int index = 0;

    while (index < arraySize)
    {
        lotteryNumbers[index] = rand() % 50 + 1;
        cout << lotteryNumbers[index] << endl;
        index++;
    }
}

重复两次。

调用
srand
恰好一次,通常在
main
的早期代码中

宽度C++11标准,可以使用新的。要获得始终不同的结果,通常您必须在每次程序执行时设置不同的种子,例如随时间变化。

您可以查看提供更好的伪随机数生成器的功能(例如Mersenne Twister)以及一个
random_设备
接口,该接口可用于为发生器植入硬件熵源

具有
std::vector
和c++11
功能的示例:

vector<int> generateLotteryNumbers(int size)
{
    static std::random_device rseed;
    static mt19937 rgen(rseed());
    uniform_int_distribution<int> idist(1,50); 

    vector<int> result;
    for(int i = 0; i < size; ++i) {
        result.push_back(idist(rgen));
        cout << result[i] << endl;
    }
    return result;
}
向量生成器模式数(整数大小)
{
静态标准::随机测试设备;
静态mt19937 rgen(rseed());
统一分布指数(1,50);
矢量结果;
对于(int i=0;icout您不应该多次调用
srand
。此外,您不应该以这种方式使用
rand
生成彩票号码(好的,取决于彩票,但我认为不允许重复号码)。使用
std::random\u shuffle

int main()
{
    int numbers[49];  // all numbers
    std::iota(begin(numbers), end(numbers), 1);  // fill with 1-49

    // shuffle numbers
    std::random_shuffle(begin(numbers), end(numbers));  

    // use first 5 numbers:
    std::copy(begin(numbers), begin(numbers) + 5, 
        std::ostream_iterator<int>(std::cout, " "));
}
intmain()
{
整数[49];//所有数字
std::iota(开始(数字),结束(数字),1);//填充1-49
//洗牌数字
随机洗牌(开始(数字),结束(数字));
//使用前5个数字:
复制(开始(数字),开始(数字)+5,
std::ostream_迭代器(std::cout,“”);
}
您可以查看提供更好的伪随机数生成器(如Mersenne Twister)的功能,以及可用于为生成器植入硬件熵源的
随机设备
接口。
int main()
{
    int numbers[49];  // all numbers
    std::iota(begin(numbers), end(numbers), 1);  // fill with 1-49

    // shuffle numbers
    std::random_shuffle(begin(numbers), end(numbers));  

    // use first 5 numbers:
    std::copy(begin(numbers), begin(numbers) + 5, 
        std::ostream_iterator<int>(std::cout, " "));
}