我需要使用种子 2222 为随机函数播种。shuffleDeck() 函数从 std 库调用 random_shuffle。
注意:问题是,每次我以 no_deals=5 和 cards_per_hand=5 运行程序时,我都会得到相同的模式:
黑桃 J、方片 K、红心 10、梅花 4、黑桃 K、 方 block 8、方 block 3、方 block 3、红心 7、梅花 5、 红心 3、红心 10、方 block 6、黑桃 K、方 block J、 红心 7,方 block 3,方 block K,红心 J,方 block 3,
不应该有变化吗?我输入的种子 2222 是否正确?
srand(2222);
for (int i=0; i<no_deals; i++)
{
// test.shuffleDeck();
for(int j=0; j<cards_per_hand; j++)
{
//test.dealCard();
check.at(j)=test.dealCard();
cout<<check.at(j)<<", ";
test.shuffleDeck();
}
cout<<endl;
}
最佳答案
这就是伪随机生成器的工作原理。每次输入相同的种子,它都会以相同的顺序输出相同的数字。
要解决此问题,请使用 time(NULL)
相反:
srand(time(NULL));
并且只调用srand
在你的程序中一次。
如果您可以使用 C++11,那么您真的应该使用新的 <random>
header 功能,一个例子 here .
关于c++ - 随机函数 C++ 的种子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114633/