【问题标题】:I want c++ generate random number is repeat我要 c++ 生成随机数是重复的
【发布时间】:2014-03-21 11:58:35
【问题描述】:

我是 C++ 编程的两周新手,但我很难让这段代码按需要工作。我的目标是生成不重复的随机数。这是部分代码,

unsigned long seed = time(NULL);
int gsmNun (int l, int h)
{
    srand(seed);
    int user_phone = rand()%h+l;

    return user_phone;
}

int main()
{

    int z = gsmNun(70000000, 99999999);
    for(int i=0; i<20; i++)
    {
        cout << "the random number is!" << z << endl;
    }

    return 0;
}

【问题讨论】:

  • 不要在每次想要生成随机数时使用srand,而只在程序开始时使用一次。 (如果可能的话,我会坚持使用来自&lt;random&gt; 的 rng。)
  • 有什么问题?如何做到不重复?或者为什么只打印一个数字?因为在for 中,您为z 打印了20 次相同的值。也许您希望z 的定义和gsmNun 调用位于for 内?
  • 您真的要打印包含相同“随机数是!somenumber”的 20 行,其中 somenumber 在所有 20 次迭代中都不会改变?
  • @Kini kirov,问题是,如何制作不重复的号码,谢谢您的输入

标签: c++ random numbers


【解决方案1】:

每次使用相同的种子调用函数时,您都会重新播种随机数生成器,因此您总是会从 rand() 获得相同的随机数。

我已经修改了您的代码并添加了一些 cmets,请注意,您在应用程序启动时为随机数生成器播种一次,然后调用 rand() 将产生实际的随机数。

不应在每次需要新的随机数时都重新设置生成器,因为调用太快会导致为这些迭代生成相同的数字。

unsigned long seed = time(NULL);
 int gsmNun (int l, int h)
 {
 // removed srand() from here.
 int user_phone = rand()%h+l;

 return user_phone;
 }

 int main()
 {

 srand(seed); // seed at application start
  for(int i=0; i<20; i++)
    {

 int z = gsmNun(70000000, 99999999);
    cout << "the random number is!" << z << endl;
    }

return 0;
}

【讨论】:

  • 他可能也希望每次迭代都有一个新的随机数,将 z 的声明移动到循环内。
  • @dutt 示例已更改。谢谢你的纠正!不太清楚我是怎么错过的。
猜你喜欢
  • 2010-11-14
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2018-06-25
  • 2016-08-20
  • 1970-01-01
相关资源
最近更新 更多