为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C ++循环中生成不同的随机数?

/ 猿问

如何在C ++循环中生成不同的随机数?

C++
慕莱坞7535251 2019-09-13 12:10:35

如何在C ++循环中生成不同的随机数?

每次循环运行时是否可以生成不同的随机数。例如,我有:

for (int t=0;t<10;t++){
    int random_x;
    srand ( time(NULL) );
    random_x = rand() % 100;
    cout<<"\nRandom X = "<<random_x;}

但问题是,它每次都会生成相同的随机数。每次循环运行都可以生成不同的随机数吗?

是否有可能重置随机数初始化?


查看完整描述

3 回答

?
泛舟湖上清波郎朗


不要srand在循环内使用,只使用一次,例如在开始时main()。而且srand()正是你如何重置这个。


查看完整回答
反对 回复 2019-09-16
?
BIG阳

您每次都获得相同的随机数,因为您在循环内设置种子。即使你正在使用time()它,它每秒只会改变一次,所以如果你的循环在一秒内完成(它很可能会),你每次都会获得相同的种子值,并且相同的初始随机数。

srand()呼叫移出循环(并在应用程序的开头只调用一次),你应该得到随机的“随机”数字。


查看完整回答
反对 回复 2019-09-16
?
烧仙草VB

千万不能使用rand(); 使用新的C ++ 11的设施(如std::mt19937std::uniform_int_distribution等)来代替。

你可以使用这样的代码(在Ideone上住这里):

#include <iostream>#include <random>using namespace std;int main(){
    // Random seed
    random_device rd;

    // Initialize Mersenne Twister pseudo-random number generator
    mt19937 gen(rd());

    // Generate pseudo-random numbers
    // uniformly distributed in range (1, 100)
    uniform_int_distribution<> dis(1, 100);

    // Generate ten pseudo-random numbers
    for (int i = 0; i < 10; i++)
    {
        int randomX = dis(gen);
        cout << "\nRandom X = " << randomX;
    }}

PS

考虑从Going Native 2013会议观看此视频,了解有关rand()相关问题的更多详细信息:

rand()被认为是有害的



查看完整回答
反对 回复 2019-09-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信