每次循环运行时是否可以生成不同的随机数.例如,我有:
for (int t=0;t<10;t++)
{
int random_x;
srand ( time(NULL) );
random_x = rand() % 100;
cout<<"\nRandom X = "<<random_x;
}
Run Code Online (Sandbox Code Playgroud)
但问题是,它每次都会生成相同的随机数.每次循环运行都可以生成不同的随机数吗?
是否有可能重置随机数初始化?
eta*_*ion 26
不要srand在循环内使用,只使用一次,例如在开始时main().而且srand()正是你如何重置这个.
pay*_*yne 16
您每次都获得相同的随机数,因为您在循环内设置种子.即使你正在使用time()它,它每秒只会改变一次,所以如果你的循环在一秒内完成(它很可能会),你每次都会获得相同的种子值,并且相同的初始随机数.
将srand()呼叫移出循环(并在应用程序的开头只调用一次),你应该得到随机的"随机"数字.
千万不能使用rand(); 使用新的C++ 11的设施(如std::mt19937,std::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;
}
}
Run Code Online (Sandbox Code Playgroud)
PS
考虑从Going Native 2013会议观看此视频,了解有关rand()相关问题的更多详细信息:
| 归档时间: |
|
| 查看次数: |
108970 次 |
| 最近记录: |