srand(time(0))
似乎没有正确播种rand()
,生成的第一个数字始终相同。
这是在OS X上运行的,我的设置或代码有问题吗?我等几秒钟重新运行程序。第一个数字仅在一天后递增,其余数字总是随机的。
#include<iostream>
using namespace std;
int main ()
{
int Num1,Num2;
// seed the random number generator
srand((unsigned int )time(NULL));
Num1 = rand() %49 +1 ;
do {Num2 = rand() % 49 + 1;}
while(Num2 == Num1);
///Display Random Numbers
cout<<"Numbers are: "<<endl;
cout<<Num1<<" "<<Num2<<endl<<endl;
return 0;
}
答案 0 :(得分:1)
你得到的数字相同,因为种子价值非常接近,随机发生器还没有时间分歧。在OS X上使用sranddev()
代替srand()
,它会为您提供更好的种子并避免此问题。
#include<iostream>
using namespace std;
int main()
{
int a, b;
// seed the random number generator
sranddev();
a = rand();
b = rand();
cout << a << " " << (a % 49) + 1 << endl
<< b << " " << (b % 49) + 1 << endl << endl;
return 0;
}
答案 1 :(得分:0)
假设您可以访问C ++ 11,那么您将有更好的运气:
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 50);
std::cout << "Numbers are: " << dis(gen) << " " << dis(gen) << "\n";
return 0;
}
rand
通常是一个相当差的随机生成器,其值范围有限,使用% N
来限制值会使其更糟糕。关于为什么兰德在这里不是一个好选择的演讲:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful
答案 2 :(得分:0)
除了使用sranddev()而不是rand()。增加范围也形成%49至50或更高似乎也起作用。