我在使用C ++洗牌时遇到了麻烦。 我有一副纸牌课。在课堂上我有一个对象矢量,它是卡片中的卡片,我试图将矢量中的元素随机播放以随机播放卡片。但是,我编写的函数似乎只是在每次迭代中移动所有内容,而不是使用向量中的另一个随机元素进行交换。我确信它的内容非常简单和愚蠢,以至于我失踪了,但我还没有弄明白。任何帮助将不胜感激。 感谢。
void shuffle(int seed = 0)
{
for (int i = 0; i < 100; i += 1)
{
for (unsigned int i = 0; i < deck.size(); i++)
{
card *swap = deck[i];
srand(time(NULL) + seed);
int temp = rand() % 52;
deck[i] = deck[temp];
deck[temp] = swap;
}
cout << "shuffled deck: ";
for (unsigned int i = 0; i < deck.size(); i++)
cout << deck[i]->compare() << " ";
cout << endl;
}
}
这是在循环内部的一个概率函数中调用的。 shuffle函数的种子是循环的迭代。
答案 0 :(得分:0)
仅将您的RNG初始化一次,例如在您的 Total_Users
Cohort Retention
-------------------------------
2014-1 2014-1 3
2014-2 2014-2 2
2014-3 2014-3 1
...
功能
main()
然后,最简单的改组方法之一是将每个项目从末尾交换到开头,并使用前面的那些随机元素。请注意,要交换的项目可以相同进行交换 - 这样项目也可以保持原样。
srand(time(NULL));