【问题标题】:What's wrong with my random number generator?我的随机数生成器有什么问题?
【发布时间】:2009-06-11 05:02:39
【问题描述】:

我只是深入研究了一些 C++,我决定制作一个随机数生成器(数字有多随机,这真的无关紧要)。大部分代码都是从网上复制的,但我的新手眼睛看不出有什么问题,有什么办法可以调整它每次都给出“6”以外的数字?

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;
int random_number(int min, int max)
{
    srand((unsigned)time(0));
    int random_num;
    int range=(max-min)+1;
    random_num = min+int(range*rand()/(RAND_MAX + 1.0)); 
    return random_num;
}
int main()
{
    for(int i =0;i < 100;i++)
    {
            cout << random_number(3,10) << endl;
    }
}

【问题讨论】:

  • 如果你只播种一次会发生什么? IE。将 srand 移动到 main 函数中的循环之前?
  • 6??不,不,随机数应该是 4 - xkcd.com/221

标签: c++ random


【解决方案1】:

在循环前添加 srand

 srand((unsigned)time(0));
  for(int i =0;i < 100;i++)
    {
        std::cout << random_number(3,10) << endl;
    }

【讨论】:

    【解决方案2】:

    不要在 random_number() 中调用 srand()。这将在每次调用时重新播种随机数生成器。对于 100 次调用,您很可能每次调用都获得相同的种子,因此获得相同的数字。

    【讨论】:

      【解决方案3】:

      问题是您每次都使用 srand。 CPU 速度如此之快,它会在一秒钟内执行所有这些代码,所以你每次都会得到相同的种子。

      将 srand 移出循环,只调用一次。

      【讨论】:

        猜你喜欢
        • 2016-02-16
        • 1970-01-01
        • 2016-05-26
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多